# NLS LANG et nls_*_parameters et SQLPLUS en UTF8

## <span class="mw-headline" id="bkmrk-oracle-10-server%C2%A0%3A-n-0">Oracle 10 server : NLS\_LANG, nls\_\*\_parameters</span>

Il y a 3 niveaux de NLS :

<div class="view" id="bkmrk-database-%28nls_databa"><div class="view"><div><div class="mw-body"><div class="mw-body-content"><div class="mw-content-ltr" dir="ltr" lang="fr"><div class="mw-parser-output">- database (nls\_database\_parameters -&gt; vue statique) : initialisés à la création de la base, immuable
- instance (v$nls\_parameters -&gt; vue dynamique ou nls\_instance\_parameters -&gt; vue statique) : initialisés par spfile, paramètres non dynamiques
- session (nls\_session\_parameters -&gt; vue statique) : changés par alter session

</div></div></div></div></div></div></div>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 :

<div class="view" id="bkmrk-nls_lang%3Damerican_am"><div class="view"><div><div class="mw-body"><div class="mw-body-content"><div class="mw-content-ltr" dir="ltr" lang="fr"><div class="mw-parser-output">- NLS\_LANG=AMERICAN\_AMERICA.WE8ISO8859.

</div></div></div></div></div></div></div>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.

<div class="view" id="bkmrk-nls_lang%3Dfrench_fran"><div class="view"><div><div class="mw-body"><div class="mw-body-content"><div class="mw-content-ltr" dir="ltr" lang="fr"><div class="mw-parser-output">- NLS\_LANG=FRENCH\_FRANCE.WE8ISO8859.

</div></div></div></div></div></div></div>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.

## <span class="mw-headline" id="bkmrk-sqlplus-en-utf8-0">SQLPLUS en UTF8</span>

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.

### <span class="mw-headline" id="bkmrk-linux-0">Linux</span>

sur une machine linux, on peut soit initialiser l'environnement, soit lancer sqlplus avec un environnement personnalisé :

```shell
export NLS_LANG=FRENCH_FRANCE.UTF8
export ORACLE_SID=orcl
sqlplus
```

ou

```shell
export ORACLE_SID=orcl
NLS_LANG=FRENCH_FRANCE.UTF8 sqlplus
```

### <span class="mw-headline" id="bkmrk-putty-0">Putty</span>

**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.

### <span class="mw-headline" id="bkmrk-windows-0">Windows</span>

Sur windows, ouvrir une fenêtre DOS, et intialiser l'environnement avant de lancer sqlplus :

```shell
C:\> set NLS_LANG=FRENCH_FRANCE.UTF8
C:\> set ORACLE_SID=orcl
C:\> sqlplus
```

<div class="visualClear" id="bkmrk-">  
</div><div id="bkmrk--0" role="contentinfo"></div>