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.