サーバー上で実行していると言うときは、SQL * Plusを使用しているということですか?
最初に確認するのは、実際に保存されている文字です。これを確認するには、DUMP関数を使用します。
Oracleダンプ関数
これにより、実際に何が保存されているかがわかります。クライアントアプリとOracleサーバー間のチェーンが適切でない場合、文字セット変換が発生する可能性があります。
正しい文字が保存されていると仮定すると、サーバー/sqlplusに表示されるのは文字変換です。つまりOracleは文字を正しく「提供」していますが、ディスプレイは期待どおりに文字を処理していません。これを修正するには、NLS_LANG環境変数を正しい文字セットに設定する必要があります。
例:最近のプロジェクトでは、デフォルト:
set NLS_LANG=AMERICAN_AMERICA.US7ASCII
次に、与えられたデータをクエリします:
NAME
-----------------------------------
MS ELLIE MARTALL
しかし:
set NLS_LANG=AMERICAN_AMERICA.US8PC437
次に、クエリを実行すると、次のようになります。
NAME
-----------------------------------
MS ÉLLIE MARTALL
また:
set NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P15
与えた:
NAME
-----------------------------------
MS ╔LLIE MARTALL
ここで重要なのは、実際のデータは同じであり、データがディスプレイに表示される方法が異なることです。その動作はNLS_LANGによって制御できます。