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...