Kiedy mówisz, że działasz na serwerze, masz na myśli SQL*Plus?
Pierwszą rzeczą do sprawdzenia jest to, jaki aktualnie znak jest przechowywany - użyj funkcji DUMP, aby to sprawdzić:
Funkcja zrzutu Oracle
Dzięki temu dowiesz się, co jest faktycznie przechowywane. Jeśli łańcuch między aplikacją kliencką a serwerem Oracle nie jest odpowiedni, może wystąpić konwersja zestawu znaków.
Zakładając, że zapisywany jest poprawny znak, to co widzisz na serwerze / sqlplus to konwersja znaków na wyświetlaczu. Tj. Oracle poprawnie "serwuje" znak, ale wyświetlacz nie obsługuje go tak, jak oczekiwałeś. Aby to naprawić, musisz ustawić zmienną środowiskową NLS_LANG na poprawny zestaw znaków.
np. w ostatnim projekcie domyślnie:
set NLS_LANG=AMERICAN_AMERICA.US7ASCII
następnie zapytanie dało jakieś dane:
NAME
-----------------------------------
MS ELLIE MARTALL
Ale:
set NLS_LANG=AMERICAN_AMERICA.US8PC437
Następnie uruchomienie zapytania dało:
NAME
-----------------------------------
MS ÉLLIE MARTALL
A także:
set NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P15
dał:
NAME
-----------------------------------
MS ╔LLIE MARTALL
Kluczową rzeczą tutaj jest to, że rzeczywiste dane są takie same, różni się sposób, w jaki dane są prezentowane na ekranie, a zachowaniem można sterować za pomocą NLS_LANG.