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

lorsque vous insérez un caractère persan dans oracle db, je vois le point d'interrogation

Quand vous dites que vous exécutez sur le serveur, vous voulez dire via SQL*Plus ?

La première chose à vérifier est le caractère réel qui est stocké - utilisez la fonction DUMP pour vérifier ceci :

Fonction de vidage Oracle

Cela vous indiquera ce qui est réellement stocké. Si la chaîne entre votre application cliente et le serveur Oracle n'est pas appropriée, vous risquez d'obtenir une conversion du jeu de caractères.

En supposant que le caractère correct est enregistré, ce que vous voyez alors sur le serveur/sqlplus est la conversion de caractères affichée. C'est à dire. Oracle "sert" le caractère correctement, mais l'affichage ne le gère pas comme prévu. Pour résoudre ce problème, vous devez définir la variable d'environnement NLS_LANG sur le jeu de caractères correct.

par exemple, dans un projet récent, la valeur par défaut :

set NLS_LANG=AMERICAN_AMERICA.US7ASCII

puis interrogez certaines données fournies :

NAME
-----------------------------------
MS ELLIE MARTALL

Mais :

set NLS_LANG=AMERICAN_AMERICA.US8PC437

Ensuite, l'exécution de la requête a donné :

NAME
-----------------------------------
MS ÉLLIE MARTALL

Et aussi :

set NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P15

a donné :

NAME
-----------------------------------
MS ╔LLIE MARTALL

L'essentiel ici est que les données réelles sont les mêmes, c'est la façon dont les données sont présentées sur votre écran qui diffère, et ce comportement peut être contrôlé par NLS_LANG.