В отговор на запитвания на клиенти, този документ описва как да зададете HS_LANGUAGE
и HS_NLS_NCHAR
параметри при използване на DG4ODBC.
Ако използвате Unicode ODBC драйвер, като например ODBC драйвера на SQL Server, уверете се, че тези параметри и стойности присъстват във вашия DG4ODBC init файл:
HS_LANGUAGE = language_territory.code_page HS_NLS_NCHAR = UCS2
Заменете език , територия и code_page с езика, територията и кодовата страница на Oracle®, които съответстват на езика, локала и кодовата страница на вашите бази данни.
Например, ако вашата база данни е SQL Server и нейният език и кодова страница са English (United States)
и 1252
, вашият HS_LANGUAGE
параметърът ще изглежда така:
HS_LANGUAGE = ENGLISH_AMERICA.WE8MSWIN1252
HS_NLS_NCHAR
стойността на параметъра казва на DG4ODBC да предаде UCS-2 кодирани данни към API на Unicode ODBC, което е символът, кодиращ стандартните състояния на ODBC, които трябва да се използват и следователно е този, който мениджърът на драйвери unixODBC очаква.
Уверете се също, че сте задали NLS_LANG
преди да стартирате приложението си Oracle®. NLS_LANG
позволява на Oracle® да знае какъв набор от символи използва вашата клиентска машина. Например:
$ echo $LANG en_US.UTF-8 $ NLS_LANG=AMERICAN_AMERICA.AL32UTF8 ./sqlplus
Ако използвате ANSI ODBC драйвер (който не поддържа широки извиквания на ODBC API), трябва да посочите набор от знаци, различен от UTF-8 в HS_LANGUAGE
стойност. Например, HS_LANGUAGE = AMERICAN_AMERICA.WE8ISO8859P1
. Ако не направите това и NLS_CHARACTERSET
на вашата база данни Oracle® стойността е зададена на UTF-8 кодиране, например AL32UTF8
, DG4ODBC:
- Използва Unicode ODBC API, например
SQLDriverConnectW
, които мениджърът на драйвери unixODBC съпоставя с техния ANSI еквивалент (или ако вашиятHS_FDS_SHAREABLE_NAME
параметър сочи към споделения обект на ODBC драйвер, причинява неуспех на връзката с грешка "недефиниран символ"). - Предава кодирани в UTF-8 данни към ODBC API, които мениджърът на драйвери unixODBC не поддържа. Връзката е неуспешна, защото DG4ODBC предава кодиран с UTF-8 низ за връзка към
SQLDriverConnectW
, с което мениджърът на драйвери unixODBC не може да се справи.
Unicode ODBC драйвери
Unicode ODBC драйверите поддържат широките ODBC API, които са от формата SQLxxxW. За да проверите дали вашият ODBC драйвер поддържа широки ODBC API, или се консултирайте с вашия доставчик на драйвери, или активирайте регистрирането на ODBC драйвери, свържете се с DG4ODBC и прегледайте получения регистрационен файл. Например:
$ 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...