私は現在次の問題に直面しています:
文字セットAL32UTF8のOracle 11gデータベースと、NLS_LANG = GERMAN_GERMANY.WE8ISO8859P1のsqlplus-clientがあります。データベースには、ISO8859-1以外のさまざまな文字が格納されています。
クライアントがデータベースに接続してこれらの特殊文字をスプールしようとすると、クライアントのNLS_LANG設定に従って文字セット変換が行われ、特殊文字は失われます。
残念ながら、クライアントNLS_LANGを変更することは簡単にはできません(レガシーアプリケーション-複雑です...)。
これらの特殊文字を失うことなく、このデータをスプールする簡単な、または標準的な方法はありますか?
Base64でデータをエンコードし、それをスプールし、クライアント側でデコードすることを考えました。
しかし、もっと良い方法はありますか?
NLS_LANGを設定しないと、困難になります。
簡単なコーディング、または文字列の解析/操作が上手ですか?
できるよ:
select DUMP(field) from table;
次に、ある種の変換コードを記述して、ダンプからUnicodeへのコンマ区切りの数値を解析します。
NLS_LANG
値はコマンドラインでのみ:
SET NLS_LANG=GERMAN_GERMANY.AL32UTF8
NLS_LANG値は、ウィンドウが開いたままである限り、このウィンドウに対して持続します。
注、NLS_LANG
すると、それはsqlplusが使用する文字セットに影響を与えません。
sqlplusは現在のコマンドラインから文字セットを継承します。つまり、これも変更する必要があります。
C:\>chcp 65001
Active code page: 65001
C:\>SET NLS_LANG=GERMAN_GERMANY.AL32UTF8
C:\>sqlplus ...
ここにMSのリスト コードページ識別子