web-dev-qa-db-ja.com

文字セットを変換せずに、sqlplusのUnicodeデータをISOクライアントにスプールする

私は現在次の問題に直面しています:

文字セットAL32UTF8のOracle 11gデータベースと、NLS_LANG = GERMAN_GERMANY.WE8ISO8859P1のsqlplus-clientがあります。データベースには、ISO8859-1以外のさまざまな文字が格納されています。

クライアントがデータベースに接続してこれらの特殊文字をスプールしようとすると、クライアントのNLS_LANG設定に従って文字セット変換が行われ、特殊文字は失われます。

残念ながら、クライアントNLS_LANGを変更することは簡単にはできません(レガシーアプリケーション-複雑です...)。

これらの特殊文字を失うことなく、このデータをスプールする簡単な、または標準的な方法はありますか?

Base64でデータをエンコードし、それをスプールし、クライアント側でデコードすることを考えました。

しかし、もっと良い方法はありますか?

1
sigsegv

NLS_LANGを設定しないと、困難になります。

簡単なコーディング、または文字列の解析/操作が上手ですか?

できるよ:

select DUMP(field) from table;

次に、ある種の変換コードを記述して、ダンプからUnicodeへのコンマ区切りの数値を解析します。

1
sandman

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のリスト コードページ識別子

1