|
■No55644 (甕星 さん) に返信
> ■No55643 (JK さん) に返信
> >[ASP.NET(VB)]-[ODP.NET]-[OracleClient]-(文字変換)-[OracleServer]
>
> あってますよ。クライアント側で使っている文字コードから、Oracleサーバーで
> 使っている文字コードに変換されることになります。Oracleサーバー側でUTF16とか
> UTF8辺りの文字コードを使っているなら、ほとんどの国の言語は格納されるでしょう。
>
> クライアント側の文字コードだけではなく、サーバー側の文字コードがどうなっているのか
> 意識しないする必要があるんじゃない。
早速の返信をありがとうございます。
甕星 さんの内容を元にレコードの追加/編集の動向を確認しました。
【レコードの追加/編集時】
Oracleクライアント側の文字コードをJA16SJISTILDEで、
Oracleサーバー側の文字コードをZHS16GBK(中国語 簡体)で、
サーバー側に日本語の記号文字をINSERT INTOした場合は、
「?」に置き換わって登録が確認されました。
Oracleクライアント側 サーバー側
---------------------------------------------------------------------------------------
「カロリー(記号2バイト):0x8769」 → 変換(SJISTILDE-GBK) → 「?:0xA3BF」
※サーバー側はSELECT DUMP(DATA,16)で値を確認しました。
> クライアント側の文字コードだけではなく、サーバー側の文字コードがどうなっているのか
> 意識しないする必要があるんじゃない。
GBK文字テーブルにカロリー記号文字に対応する値が存在しないため「?」に置き換わったという理由で登録されたと思います。
これは期待通りでした。
甕星 さんがおっしゃるとおり、おそらくサーバー側の文字コードをUTF8,16にすれば正常に登録されると思います。
ありがとうございます。
【レコードの参照時】
ここの参照(SELECT)のところが上手く確認できませんでした。
▽期待した結果
Oracleサーバー側 クライアント側
---------------------------------------------------------------------------------------
「カロリー(記号2バイト):0x8769」 → 変換(SJISTILDE-GBK) → 「?:0xA3BF」
▽実際の結果
Oracleサーバー側 クライアント側
---------------------------------------------------------------------------------------
「カロリー(記号2バイト):0x8769」 → 変換(SJISTILDE-GBK) → 「カロリー(記号2バイト)」化けない...
VB.NETの文字列の内部表記はUFT16であるので、実際にサーバー−クライアント間で変換された文字コード値は確認できませんでした。
サーバー側をUTF8,16あたりに設定するか、型をNCHAR(UTF16)あたりにできればよいのですが、
既存の別システムが存在している環境であるため、データベースの文字コードを変更できません。
UTF8,16キャラクタセットのDBインスタンスとAPPサーバーを新設する理由が欲しく、
「文字化けするからだよ」という調査結果が欲しいです。
自分の環境の設定がおかしいのか、ODP.NETの仕様なのか...
そこらへんの文献を見つけることができずに困っています(汗
|