Em resposta às consultas dos clientes, este documento descreve como definir o
HS_LANGUAGE
e HS_NLS_NCHAR
parâmetros ao usar DG4ODBC. Se você estiver usando um driver ODBC Unicode, como o driver ODBC do SQL Server, certifique-se de que esses parâmetros e valores estejam presentes em seu arquivo init DG4ODBC:
HS_LANGUAGE = language_territory.code_page HS_NLS_NCHAR = UCS2
Substituir idioma , território e code_page com o idioma, território e página de código da Oracle® que correspondem ao idioma, localidade e página de código de seus bancos de dados.
Por exemplo, se seu banco de dados for SQL Server e seu idioma e página de código forem
English (United States)
e 1252
, seu HS_LANGUAGE
parâmetro ficaria assim:HS_LANGUAGE = ENGLISH_AMERICA.WE8MSWIN1252
O
HS_NLS_NCHAR
O valor do parâmetro informa ao DG4ODBC para passar dados codificados em UCS-2 para as APIs ODBC Unicode, que é a codificação de caracteres que os estados padrão ODBC devem ser usados e, portanto, é aquela que o Gerenciador de driver unixODBC espera. Certifique-se também de ter definido
NLS_LANG
antes de iniciar seu aplicativo Oracle®. NLS_LANG
permite que o Oracle® saiba qual conjunto de caracteres sua máquina cliente está usando. Por exemplo:$ echo $LANG en_US.UTF-8 $ NLS_LANG=AMERICAN_AMERICA.AL32UTF8 ./sqlplus
Se você estiver usando um driver ODBC ANSI (que não suporta chamadas de API ODBC amplas), precisará especificar um conjunto de caracteres não UTF-8 no
HS_LANGUAGE
valor. Por exemplo, HS_LANGUAGE = AMERICAN_AMERICA.WE8ISO8859P1
. Se você não fizer isso e o NLS_CHARACTERSET
do seu banco de dados Oracle® valor é definido para uma codificação UTF-8, por exemplo AL32UTF8
, DG4ODBC:- Usa as APIs ODBC Unicode, por exemplo,
SQLDriverConnectW
, que o Gerenciador de Driver unixODBC mapeia para seu equivalente ANSI (ou se seuHS_FDS_SHAREABLE_NAME
parâmetro aponta para o objeto compartilhado do driver ODBC, faz com que a conexão falhe com um erro de "símbolo indefinido"). - Passa dados codificados em UTF-8 para as APIs ODBC, que o Gerenciador de Driver unixODBC não oferece suporte. A conexão falha porque DG4ODBC passa uma string de conexão codificada em UTF-8 para
SQLDriverConnectW
, que o gerenciador de driver unixODBC não consegue manipular.
Drivers ODBC Unicode
Os drivers ODBC Unicode suportam as APIs ODBC amplas, que estão no formato SQLxxxW. Para verificar se o driver ODBC oferece suporte a APIs ODBC amplas, verifique com o fornecedor do driver ou habilite o log do driver ODBC, conecte-se ao DG4ODBC e examine o arquivo de log resultante. Por exemplo:
$ 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...