2

文字エンコードに深刻な問題があります。いくつかの背景を与えるために:

  1. Unix画面にトルコ語でデータを入力するトルコのビジネスユーザーがいます。
  2. 私のデータベースのNLSパラメータはに設定されAMERICANWE8ISO8859P1UnixはNLS_LANG に設定されていAMERICAN_AMERICA.WE8ISO8859P1ます。
  3. トルコのビジネスでは、UNIX画面とTOADですべてのトルコ語の文字を見ることができますが、私はそうではありません。それらは西ヨーロッパの文字セットでしか見ることができません。

ビジネスの終わりに:ÖZER İNŞAAT TAAHHÜT VE
私たちの終わりに:ÖZER ÝNÞAAT TAAHHÜT VE

İトルコ語の文字に気づき、ISO8859-1Ş文字セットに変換されている場合。ただし、すべての設定(dbおよびunixのNLSパラメーター)は両端で同じです- ISO8859-1(西ヨーロッパ)

いくつかの研究で、私は理解できます-トルコのマシンは、リアルタイムで変換を行うことによってトルコのデータを表示できます(DB NLS設定はローカルNLS設定によって上書きされます)。

これで、データベースで実行されているインターフェイスがあります。データベースからデータを抽出し、UNIXパス上の.csvファイルにスプールするPL / SQLスクリプト(シェルスクリプトを介して実行)があります。次に、その.csvファイルがMFT(マネージドファイル転送)を介して外部システムに転送されます。

問題は-Exractがトルコ人の性格を決して含むことはないということです。すべてのトルコのキャラクターは西ヨーロッパのキャラクターセットに変換されており、データ変換/損失のケースとして扱われる外部システムにこのようになり、私のビジネスは本当に不幸です。

誰か教えてもらえますか?トルコのキャラクターをすべて保持するにはどうすればよいですか?

PS:外部システムの文字セットをISP8859-9文字セットに設定できます。

よろしくお願いします。

4

2 に答える 2

6

データベースの文字セットがISO-8859-1であると言っている場合、つまり

SELECT parameter, value
  FROM v$nls_parameters
 WHERE parameter = 'NLS_CHARACTERSET'

を返し、valueデータWE8ISO8859P1を、、、または列に格納している場合CHARVARCHAR問題VARCHAR2は、データベースの文字セットがトルコ語の文字の完全なセットをサポートしていないことです。文字がISO-8859-1コードページレイアウトにない場合、データベース文字セットによって管理されるデータベース列に適切に格納できません。トルコ語のデータをISO-8859-1データベースに保存する場合は、代わりに回避策の文字を使用できる可能性があります(つまり、Şの代わりにSを使用します)。ただし、トルコ語の全範囲の文字をサポートする場合は、それらすべての文字をサポートする文字セットに移動する必要があります。ISO-8859-9またはUTF-8のいずれかが比較的一般的です。

ただし、既存のデータベースの文字セットを変更することは簡単な作業ではありません。グローバリゼーション・サポート・ガイドには、使用しているOracleのバージョンに対応する、文字セットの移行に関する章があります。Unicode文字セット(シングルバイトのISO文字セットの1つに固執するのではなく、一般的に推奨されるアプローチ)に移行する場合は、Oracle Database Migration AssistantforUnicodeを活用できる可能性があります。

この時点で、少なくとも一部のアプリケーションがデータを「正しく」認識しているため、データベースがトルコ語の文字をサポートしている必要があるという反対意見がよく見られます。問題は、誤って設定したNLS_LANG場合、文字セット変換を完全にバイパスできることです。つまり、クライアント上で文字が持つバイナリ表現は、データベースを変更せずに永続化されます。データを読み取るすべてのプロセスがNLS_LANG同じように正しく構成されていない限り、動作しているように見える場合があります。ただし、他のアプリケーションでは構成できないことがすぐにわかります。NLS_LANG同じように間違っています。たとえば、Javaアプリケーションは、常にデータベースのデータを内部でUnicode文字列に変換する必要があります。したがって、データをデータベースに誤って保存している場合は、そのように聞こえますが、それらのアプリケーションにデータを正しく読み取らせる方法はありません。シェルスクリプトでSQL*Plusを使用してファイルを生成しているだけの場合は、データファイルが正しいように見えるように、クライアントが正しく構成されていない可能性があります。しかし、既存の設定ミスを存続させるのは非常に悪い考えです。あなたは多くのことに自分自身を開きますOracleエクスポートユーティリティなどのツールがデータを破損していることがわかった場合、将来、さまざまなクライアントがさまざまな文字セットのデータをデータベースに挿入し、解きほぐしがはるかに困難になるという、より大きな問題が発生します。エクスポートされた場合、またはデータを表示するために正しく構成できないツールを使用する場合。問題を早期に修正する方がはるかに効果的です。

于 2012-09-27T19:03:07.533 に答える
1

トルコ語では、NLS_LANGパラメータをに設定するだけで十分です。AMERICAN_AMERICA.WE8ISO8859P9

于 2018-08-21T17:09:27.843 に答える