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