NLS LANG et nls * parameters
De wikiGite
Oracle 10 : NLS_LANG, nls_*_parameters
Il y a 3 niveaux de NLS :
- database (nls_database_parameters -> vue statique) : initialisés à la création de la base, immuable
- instance (v$nls_parameters -> vue dynamique ou nls_instance_parameters -> vue statique) : initialisés par spfile, paramètres non dynamiques
- session (nls_session_parameters -> vue statique) : changés par alter session
Session si non paramétré prend la valeur d'Instance qui si non paramétré prend la valeur de Database.
MAIS il y a un autre paramètre qui peut tout changer : NLS_LANG, paramètre d'environnement OS. Or sur Windows il est paramétré dans les registres.
Exemples :
- NLS_LANG=AMERICAN_AMERICA.WE8ISO8859.
Une base crée en AMERICAN_AMERICA prendra cette valeur par défaut. Si on change le spfile, l'instance sera bien en FRENCH_FRANCE, MAIS les sessions utilisateurs resteront en AMERICAN_AMERICA à cause du NLS_LANG.
Par contre une base créée en FRENCH_FRANCE reportera bien ces paramètres sur instance et sessions.
- NLS_LANG=FRENCH_FRANCE.WE8ISO8859.
La base créée en AMERICAN_AMERICA prend FRENCH_FRANCE au redémarrage. Si on a modifié le spfile, les sessions sont aussi en FRENCH_FRANCE.
SQLPLUS en UTF8
Pour insérer des données UTF8 dans une base, il ne suffit pas que celle-ci ait été créée en UTF8 : il faut que sqlplus sur le client qui fait les insertions soit paramétré en UTF8, ce qui n'est pas la valeur par défaut.
Linux
sur une machine linux, on peut soit initialiser l'environnement, soit lancer sqlplus avec un environnement personnalisé :
# export NLS_LANG=FRENCH_FRANCE.UTF8 # export ORACLE_SID=orcl # sqlplus
ou
# export ORACLE_SID=orcl # NLS_LANG=FRENCH_FRANCE.UTF8 sqlplus
Putty
Note pour putty : si on se connecte à la machine linux par putty, il faut d'abord modifier la configuration de votre session putty (Dans Window → Translation) pour choisir le jeu de caractères UTF-8.
Windows
Sur windows, ouvrir une fenêtre DOS, et intialiser l'environnement avant de lancer sqlplus :
C:\> set NLS_LANG=FRENCH_FRANCE.UTF8 C:\> set ORACLE_SID=orcl C:\> sqlplus