1

(Perl 5.8 を使用して) ロシア語の文字を次のように設定されている oracle データベースに挿入しようとしています。

1 NLS_LANGUAGE RUSSIAN
2 NLS_TERRITORY CIS
3 NLS_CURRENCY р.
4 NLS_ISO_CURRENCY CIS
5 NLS_NUMERIC_CHARACTERS , 
6 NLS_CALENDAR GREGORIAN
7 NLS_DATE_FORMAT DD.MM.RR
8 NLS_DATE_LANGUAGE RUSSIAN
9 NLS_CHARACTERSET AL32UTF8
10 NLS_SORT RUSSIAN
11 NLS_TIME_FORMAT HH24:MI:SSXFF
12 NLS_TIMESTAMP_FORMAT DD.MM.RR HH24:MI:SSXFF
13 NLS_TIME_TZ_FORMAT HH24:MI:SSXFF TZR
14 NLS_TIMESTAMP_TZ_FORMAT DD.MM.RR HH24:MI:SSXFF TZR
15 NLS_DUAL_CURRENCY р.
16 NLS_NCHAR_CHARACTERSET AL16UTF16
17 NLS_COMP BINARY
18 NLS_LENGTH_SEMANTICS BYTE
19 NLS_NCHAR_CONV_EXCP FALSE

DBD::Oracle 経由で接続を開く前に、perl 環境を設定しました。に

$ENV{NLS_LANG} = 'AMERICAN_AMERICA.AL32UTF8'

ただし、何らかの理由でロシア語の文字が DB に正しく作成されていません。誰でも理由を教えてもらえますか?

ありがとう

4

1 に答える 1

0

挿入操作と選択操作の両方に関与する製品と OS の完全なスタックがなければ、何が起こっているのかを診断するのは困難です。€ユーロ記号でも同様の問題があり、全体像を把握するのに数日かかりました. これには、パテ エンコーディング、Linux ロケール、Linux セッション NLS_LANG、Windows CodePage、Windows CMD コードページと使用される文字フォント、および Windows セッション NLS_LANG が含まれていました。Web プログラミングを行っている場合は、ページと httpd のエンコーディングが別の要因になる可能性があります。製品のスタックを介して挿入し、別の製品を介して取得するDBでデータが正常であることを確認してください。Linux、Windows、およびWindows CMDの任意の組み合わせで同じデータを挿入/選択できるようにセットアップしました。これは、DBで正しく取得されるプローブとしてです。1 つのシステムのみを使用する場合は、€ を挿入し、€ を取得して、' DB が € として認識しないものを保持していることに気付きません。これは気がつかないうちに……。

また、テキスト I/O に関しては、DB ではなく NLS_LANG で OS/Web サーバーのロケール エンコーディングを使用する必要があります。たとえば、Windows では通常 MSWINxxxx です。AL32UTF8 への変換は、sqlnet によって行われます。

于 2010-12-26T20:56:34.303 に答える