En respuesta a las consultas de los clientes, este documento describe cómo configurar el HS_LANGUAGE
y HS_NLS_NCHAR
parámetros cuando se utiliza DG4ODBC.
Si está utilizando un controlador ODBC Unicode, como el controlador ODBC de SQL Server, asegúrese de que estos parámetros y valores estén presentes en su archivo de inicio DG4ODBC:
HS_LANGUAGE = language_territory.code_page HS_NLS_NCHAR = UCS2
Reemplazar idioma , territorio y página_código con el idioma, el territorio y la página de códigos de Oracle® que correspondan con el idioma, la configuración regional y la página de códigos de sus bases de datos.
Por ejemplo, si su base de datos es SQL Server y su idioma y página de códigos son English (United States)
y 1252
, su HS_LANGUAGE
el parámetro se vería así:
HS_LANGUAGE = ENGLISH_AMERICA.WE8MSWIN1252
El HS_NLS_NCHAR
El valor del parámetro le dice a DG4ODBC que pase datos codificados en UCS-2 a las API de ODBC de Unicode, que es la codificación de caracteres que deben usarse los estados estándar de ODBC y, por lo tanto, es la que espera el Administrador de controladores unixODBC.
Asegúrese también de haber configurado NLS_LANG
antes de iniciar su aplicación Oracle®. NLS_LANG
le permite a Oracle® saber qué juego de caracteres está usando su máquina cliente. Por ejemplo:
$ echo $LANG en_US.UTF-8 $ NLS_LANG=AMERICAN_AMERICA.AL32UTF8 ./sqlplus
Si está utilizando un controlador ANSI ODBC (que no admite llamadas API ODBC amplias), debe especificar un juego de caracteres que no sea UTF-8 en el HS_LANGUAGE
valor. Por ejemplo, HS_LANGUAGE = AMERICAN_AMERICA.WE8ISO8859P1
. Si no hace esto y el NLS_CHARACTERSET
de su base de datos Oracle® el valor se establece en una codificación UTF-8, por ejemplo, AL32UTF8
, DG4ODBC:
- Utiliza las API ODBC de Unicode, por ejemplo,
SQLDriverConnectW
, que el administrador de controladores unixODBC asigna a su equivalente ANSI (o si suHS_FDS_SHAREABLE_NAME
el parámetro apunta al objeto compartido del controlador ODBC, hace que la conexión falle con un error de "símbolo indefinido"). - Pasa datos codificados en UTF-8 a las API de ODBC, que no son compatibles con el administrador de controladores unixODBC. La conexión falla porque DG4ODBC pasa una cadena de conexión codificada en UTF-8 a
SQLDriverConnectW
, que el administrador de controladores unixODBC no puede manejar.
Controladores ODBC Unicode
Los controladores Unicode ODBC son compatibles con las API ODBC amplias, que tienen el formato SQLxxxW. Para verificar si su controlador ODBC es compatible con las API de ODBC amplias, consulte con su proveedor de controladores o habilite el registro del controlador ODBC, conéctese con DG4ODBC y examine el archivo de registro resultante. Por ejemplo:
$ 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...