2017-09-19 7 views
0

Serveur: IBM i Series AS/400 exécutant DB2Comment convertir le jeu de caractères en unicode dans db2 requête

Client: Linux en utilisant unixodbc

J'ai une table dans une base de données DB2 avec une colonne de données à l'aide CCSID 836 (EBCDIC chinois simplifié). Je veux obtenir des résultats en UTF-16 pour qu'ils fonctionnent sur d'autres systèmes, mais j'ai du mal à trouver la bonne façon de convertir.

Lorsque je tente:

SELECT CAST(MYCOLNAME AS VARCHAR(100) CCSID 13491) FROM MY.TABLE 

Je reçois l'erreur:

SQL State: 22522 
Vendor Code: -189 
Message: [SQL0189] Coded Character Set Identifier 13491 not valid. Cause . . . . . : Coded Character Set Identifier (CCSID) 13491 is not valid for one of the following reasons: -- The CCSID is not EBCDIC. -- The CCSID is not supported by the system. -- The CCSID is not vaid for the data type. -- If the CCSID is specified for graphic data, then the CCSID must be a DBCS CCSID. -- If the CCSID is specified for UCS-2 or UTF-16 data, then the CCSID must be a UCS-2 or UTF-16 CCSID. -- If the CCSID is specified for XML data, then the CCSID must be SBCS or Unicode. It must not be DBCS or 65545. 

Comment puis-je convertir les données de CCSID 836 en UTF-16? J'ai également échoué avec UNICODE_STR().

+0

Veuillez modifier votre question pour indiquer le nom du client DB2 et la version/le groupe de correctifs installés sur Linux, ainsi que le nom et la version de la distribution Linux. Veuillez également spécifier les paramètres régionaux que vous avez installés sous Linux (sortie de 'locale -a') et qui est le bon pour unixodbc (valeur de $ LANG). – mao

Répondre

0

Je ne peux pas expliquer pourquoi, mais voici ce qui fonctionne:

SELECT CAST(MYCOLNAME AS VARCHAR(100) CCSID 935) FROM MY.TABLE 

CCSID natif pour la colonne en question est 836, ce qui semble très similaire à 935, donc je ne comprends pas la différence. Mais 935 travaille pour moi.