W odpowiedzi na zapytania klientów ten dokument opisuje, jak ustawić HS_LANGUAGE
i HS_NLS_NCHAR
parametry podczas korzystania z DG4ODBC.
Jeśli używasz sterownika ODBC Unicode, takiego jak sterownik ODBC SQL Server, upewnij się, że te parametry i wartości są obecne w pliku początkowym DG4ODBC:
HS_LANGUAGE = language_territory.code_page HS_NLS_NCHAR = UCS2
Zastąp język , terytorium i strona_kodowa z językiem, terytorium i stroną kodową Oracle®, które odpowiadają językowi, lokalizacji i stronie kodowej Twojej bazy danych.
Na przykład, jeśli Twoja baza danych to SQL Server, a jej język i strona kodowa to English (United States)
i 1252
, Twój HS_LANGUAGE
parametr wyglądałby tak:
HS_LANGUAGE = ENGLISH_AMERICA.WE8MSWIN1252
HS_NLS_NCHAR
wartość parametru mówi DG4ODBC o przekazywaniu danych zakodowanych w UCS-2 do interfejsów API Unicode ODBC, co oznacza kodowanie znaków, których stany standardu ODBC powinny być używane, a zatem jest to ten, którego oczekuje menedżer sterowników unixODBC.
Upewnij się również, że ustawiłeś NLS_LANG
przed uruchomieniem aplikacji Oracle®. NLS_LANG
informuje Oracle®, jakiego zestawu znaków używa Twój komputer kliencki. Na przykład:
$ echo $LANG en_US.UTF-8 $ NLS_LANG=AMERICAN_AMERICA.AL32UTF8 ./sqlplus
Jeśli używasz sterownika ANSI ODBC (który nie obsługuje szerokich wywołań API ODBC), musisz określić zestaw znaków inny niż UTF-8 w HS_LANGUAGE
wartość. Na przykład HS_LANGUAGE = AMERICAN_AMERICA.WE8ISO8859P1
. Jeśli tego nie zrobisz, a NLS_CHARACTERSET
Twojej bazy danych Oracle® wartość jest ustawiona na kodowanie UTF-8, na przykład AL32UTF8
, DG4ODBC:
- Używa Unicode ODBC API, na przykład
SQLDriverConnectW
, który menedżer sterowników unixODBC mapuje na ich odpowiednik ANSI (lub jeśli TwójHS_FDS_SHAREABLE_NAME
parametr wskazuje na obiekt współdzielony sterownika ODBC, powoduje niepowodzenie połączenia z błędem „niezdefiniowany symbol”). - Przekazuje dane zakodowane w UTF-8 do interfejsów API ODBC, których nie obsługuje menedżer sterowników unixODBC. Połączenie nie powiodło się, ponieważ DG4ODBC przekazuje ciąg połączenia zakodowany w UTF-8 do
SQLDriverConnectW
, którego menedżer sterowników unixODBC nie jest w stanie obsłużyć.
Sterowniki Unicode ODBC
Sterowniki ODBC Unicode obsługują szerokie interfejsy API ODBC, które mają postać SQLxxxW. Aby sprawdzić, czy sterownik ODBC obsługuje szerokie interfejsy API ODBC, skontaktuj się z dostawcą sterownika lub włącz rejestrowanie sterownika ODBC, połącz się z DG4ODBC i sprawdź wynikowy plik dziennika. Na przykład:
$ 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...