En réponse aux questions des clients, ce document décrit comment définir le HS_LANGUAGE
et HS_NLS_NCHAR
paramètres lors de l'utilisation de DG4ODBC.
Si vous utilisez un pilote ODBC Unicode tel que le pilote ODBC SQL Server, assurez-vous que ces paramètres et valeurs sont présents dans votre fichier d'initialisation DG4ODBC :
HS_LANGUAGE = language_territory.code_page HS_NLS_NCHAR = UCS2
Remplacer langue , territoire et code_page avec la langue, le territoire et la page de codes Oracle® qui correspondent à la langue, aux paramètres régionaux et à la page de codes de vos bases de données.
Par exemple, si votre base de données est SQL Server et que sa langue et sa page de code sont English (United States)
et 1252
, votre HS_LANGUAGE
le paramètre ressemblerait à ceci :
HS_LANGUAGE = ENGLISH_AMERICA.WE8MSWIN1252
Le HS_NLS_NCHAR
La valeur du paramètre indique à DG4ODBC de transmettre les données encodées UCS-2 aux API ODBC Unicode, qui est le caractère encodant les états standard ODBC à utiliser et est donc celui attendu par le gestionnaire de pilotes unixODBC.
Assurez-vous également que vous avez défini NLS_LANG
avant de démarrer votre application Oracle®. NLS_LANG
permet à Oracle® de savoir quel jeu de caractères votre ordinateur client utilise. Par exemple :
$ echo $LANG en_US.UTF-8 $ NLS_LANG=AMERICAN_AMERICA.AL32UTF8 ./sqlplus
Si vous utilisez un pilote ODBC ANSI (qui ne prend pas en charge les appels d'API ODBC étendus), vous devez spécifier un jeu de caractères non UTF-8 dans le HS_LANGUAGE
valeur. Par exemple, HS_LANGUAGE = AMERICAN_AMERICA.WE8ISO8859P1
. Si vous ne le faites pas et que le NLS_CHARACTERSET
de votre base de données Oracle® la valeur est définie sur un encodage UTF-8, par exemple AL32UTF8
, DG4ODBC :
- Utilise les API ODBC Unicode, par exemple,
SQLDriverConnectW
, que le gestionnaire de pilotes unixODBC mappe à leur équivalent ANSI (ou si votreHS_FDS_SHAREABLE_NAME
Le paramètre pointe vers l'objet partagé du pilote ODBC, provoque l'échec de la connexion avec une erreur "symbole non défini"). - Transmet les données encodées en UTF-8 aux API ODBC, que le gestionnaire de pilotes unixODBC ne prend pas en charge. La connexion échoue car DG4ODBC transmet une chaîne de connexion encodée en UTF-8 à
SQLDriverConnectW
, que le gestionnaire de pilotes unixODBC est incapable de gérer.
Pilotes ODBC Unicode
Les pilotes ODBC Unicode prennent en charge les API ODBC étendues, qui se présentent sous la forme SQLxxxW. Pour vérifier si votre pilote ODBC prend en charge les API ODBC étendues, vérifiez auprès de votre fournisseur de pilote ou, activez la journalisation du pilote ODBC, connectez-vous à DG4ODBC et examinez le fichier journal résultant. Par exemple :
$ 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...