Als Antwort auf Kundenanfragen beschreibt dieses Dokument, wie der HS_LANGUAGE eingestellt wird und HS_NLS_NCHAR Parameter bei Verwendung von DG4ODBC.
Wenn Sie einen Unicode-ODBC-Treiber wie den SQL Server-ODBC-Treiber verwenden, stellen Sie sicher, dass diese Parameter und Werte in Ihrer DG4ODBC-Init-Datei vorhanden sind:
HS_LANGUAGE = language_territory.code_page HS_NLS_NCHAR = UCS2
Ersetzen Sie Sprache , Gebiet und code_page mit der Sprache, dem Gebiet und der Codepage von Oracle®, die der Sprache, dem Gebietsschema und der Codepage Ihrer Datenbank entsprechen.
Wenn Ihre Datenbank beispielsweise SQL Server ist und ihre Sprache und Codepage English (United States) sind und 1252 , Ihre HS_LANGUAGE Parameter würde so aussehen:
HS_LANGUAGE = ENGLISH_AMERICA.WE8MSWIN1252
Der HS_NLS_NCHAR Der Parameterwert weist DG4ODBC an, UCS-2-codierte Daten an die Unicode-ODBC-APIs zu übergeben. Dies ist die Zeichencodierung, die laut ODBC-Standard verwendet werden sollte und die daher vom unixODBC-Treibermanager erwartet wird.
Stellen Sie außerdem sicher, dass Sie NLS_LANG eingestellt haben bevor Sie Ihre Oracle®-Anwendung starten. NLS_LANG teilt Oracle® mit, welchen Zeichensatz Ihr Client-Rechner verwendet. Zum Beispiel:
$ echo $LANG en_US.UTF-8 $ NLS_LANG=AMERICAN_AMERICA.AL32UTF8 ./sqlplus
Wenn Sie einen ANSI-ODBC-Treiber verwenden (der keine breiten ODBC-API-Aufrufe unterstützt), müssen Sie in HS_LANGUAGE einen Nicht-UTF-8-Zeichensatz angeben Wert. Beispiel:HS_LANGUAGE = AMERICAN_AMERICA.WE8ISO8859P1 . Wenn Sie dies nicht tun, und das NLS_CHARACTERSET Ihrer Oracle®-Datenbank Der Wert ist auf eine UTF-8-Codierung festgelegt, zum Beispiel AL32UTF8 , DG4ODBC:
- Verwendet die Unicode-ODBC-APIs, zum Beispiel
SQLDriverConnectW, die der unixODBC-Treibermanager ihrem ANSI-Äquivalent zuordnet (oder wenn IhrHS_FDS_SHAREABLE_NAME-Parameter auf das gemeinsam genutzte Objekt des ODBC-Treibers zeigt, führt dazu, dass die Verbindung mit dem Fehler "undefiniertes Symbol" fehlschlägt). - Übergibt UTF-8-codierte Daten an die ODBC-APIs, die der unixODBC-Treiber-Manager nicht unterstützt. Die Verbindung schlägt fehl, da DG4ODBC eine UTF-8-codierte Verbindungszeichenfolge an
SQLDriverConnectWübergibt , die der unixODBC-Treibermanager nicht verarbeiten kann.
Unicode-ODBC-Treiber
Unicode-ODBC-Treiber unterstützen die breiten ODBC-APIs, die das Format SQLxxxW haben. Um zu überprüfen, ob Ihr ODBC-Treiber breite ODBC-APIs unterstützt, wenden Sie sich entweder an Ihren Treiberanbieter oder aktivieren Sie die ODBC-Treiberprotokollierung, stellen Sie eine Verbindung mit DG4ODBC her und untersuchen Sie die resultierende Protokolldatei. Zum Beispiel:
$ more /etc/odbc.ini [SQLSERVER_SAMPLE] . . . Logging=Yes LogFile=/tmp/mssql.log $ ./sqlplus / as sysdba $ select * from mytable@mssqllink; $ exit $ more /tmp/mssql.log . . . ENTRY: SQLGetInfoW: connection_handle...