Oracle
 sql >> Base de données >  >> RDS >> Oracle

Définition des paramètres de langage Oracle pour DG4ODBC

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 votre HS_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...