2017-09-19 4 views
0

Server Unicode: IBM i Series AS/400 laufen DB2Wie Charakter konvertiert gesetzt in DB2 Query

Auftraggeber: Linux mit unixodbc

Ich habe eine Tabelle in einer DB2-Datenbank mit einer Spalte von Daten unter Verwendung von CCSID 836 (vereinfachtes Chinesisch EBCDIC). Ich möchte Ergebnisse in UTF-16 erhalten, damit sie auf anderen Systemen funktionieren, aber es fällt mir schwer, den richtigen Konvertierungsweg zu finden.

Wenn ich versuche:

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

ich den Fehler:

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. 

Wie kann ich die Daten von CCSID 836 in UTF-16-Format konvertieren? Ich bin mit UNICODE_STR() gleichermaßen erfolglos gewesen.

+0

Bearbeiten Sie Ihre Frage, um anzugeben, welcher DB2-Client-Name und welche Version/Fixpack unter Linux installiert ist, zusammen mit dem Linux-Distro-Namen und Release. Bitte geben Sie auch an, welche Ländereinstellungen Sie unter Linux installiert haben (Ausgabe von 'locale -a') und welche die für unixodbc (Wert von $ LANG) ist. – mao

Antwort

0

ich nicht erklären kann, warum, aber hier ist, was funktioniert:

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

Die native CCSID für die betreffende Spalte 836 ist, was zu 935 sehr ähnlich scheint, so verstehe ich nicht den Unterschied. Aber 935 funktioniert für mich.