Forum
Hallo Andreas,
ich denke es sind ganz andere Dinge, die Dir das Problem bescheren.
Erstmal zurück zur Frage: Wo wird überhaupt konvertiert …
Hier beispielhaft verschiedene Zugriffe auf ein DB2 for AIX. Mit "db2 -a connect to MYDB" kommt folgendes Ergebnis (die seltsamen Sonderzeichen ersetzt durch "|"):
Connect am Win/XP Client:
49|1208|MYUSER |MYDB|QDB2/AIX64|442|442|0|1252|1
Local Connect am AIX Server:
49|1208|MYUSER |MYDB|QDB2/AIX64|436|436|0|819|1|
Die Datenbank MYDB ist wie folgt konfiguriert:
Datenbank Konfiguration (DB CFG):
Database territory = de
Database code page = 1208
Database code set = utf-8
Database country/region code = 49
Das "db2 -a" liefert vorneweg Server-Codepage, dann Client-Codepage-Informationen.
- Erster Verweis: Server-Einstellungen = 1208 = Unicode UTF-8, Region 49 = Deutschland
- Zweiter Verweis: Client Einstellungen = 819 = Unix/Derivat, oder 1252 = Windows
Zwischen diesen unterschiedlichen Codepages muss also "vermittelt, d.h. konvertiert werden.
When code page conversion occurs: http://publib.boulder.ibm.com/infocenter/db2luw/v9/topic/com.ibm.db2.udb.apdv.sql.doc/doc/c0006849.htm
Unterstützte Gebietscodes und Codepages: http://publib.boulder.ibm.com/infocenter/db2luw/v9/topic/com.ibm.db2.udb.admin.doc/doc/r0004565.htm
Die Codepage Konvertierung sollte also wie gewünscht funktionieren, wenn sich alle Endgeräte korrekt deklariert haben.
Nun zum anderen Theme FOR BIT DATA
FOR BIT DATA wird wie CODEPAGE 0 behandelt, also niemals konvertiert. Problematisch könnte sein, wenn Daten mehrfach zwischen Columns mit verschiedenen Spaltenattributen hin und hergeschoben werden.
Wie die Spalten "codiert" sind, kannst Du im Catalog abfragen:
FOR BIT DATA-Spalten tragen das Attribut CODEPAGE=0, siehe Abfrage:
s-elect colname, typename, codepage
from syscat.columns
where tabname = ‚yourtable‘
Dann zu beachten:
The IBM DB2 Driver for JDBC and SQLJ returns data from a ResultSet.getString call for a CHAR FOR BIT DATA or VARCHAR FOR BIT DATA column as a lowercase hexadecimal string.
Wie kannst man solche Spalteninhalte von [VAR]CHAR FOR BIT DATA Tabellenspalten dann wieder anzeigen:
S-ELECT CAST(COL_FOR_BIT_DATA AS [VAR]CHAR(20) FOR SBCS DATA) FROM YOURTABLE
Ich hoffe, dass die Infos nützlich sind. Über ein Feedback würde wir uns freuen. Vielleicht hast Du die Lösung ja auch schon gefunden.
Gruß
Gernot