Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Festlegen von Oracle-Sprachparametern für DG4ODBC

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