0

WebSphere上で実行され、Oracleデータベースと対話する(AL32UTF8文字セットを使用する)Webアプリケーションを使用しています。

Webアプリケーションを使用してテキストを入力し、「保存」ボタンを押すと、テキストがOracleデータベースのCLOBフィールドに保存されると思います。Webアプリケーションには、データベースからテキストを取得してテキストを表示する機能があります。

ユーロ記号(€)を含むテキストを入力し、[保存]ボタンを押して、Webアプリケーションを使用してテキストを表示すると、ユーロ記号が「?」に破損していることがわかりました。

データベースでテキストが破損しているかどうかを調べようとしています。

  1. Oracleではユーロ記号は「0xE20x820xAC」(3バイト)として保存されていますか?

  2. この場合、これを確認できるデータベースクエリはありますか?(テーブルはSOME_TABLEと呼ばれ、CLOBフィールドはSOME_FIELDと呼ばれるとしましょう。)

どうもありがとうございます。

4

1 に答える 1

1

と同じ方法で保存され、varchar23 バイトのように見えます。dump関数を使用して、それがどのように格納されているかを確認clobできますが、関連する文字 (この場合は 3 バイト相当) を抽出する必要がありますdbms_lob.substr。これは Linux の 11gR2 からのものです。

create table t42 (x clob, y varchar2(10));

insert into t42(x, y) values ('€','€');

select dump(dbms_lob.substr(x,3,1)) from t42;

DUMP(DBMS_LOB.SUBSTR(X,3,1))
--------------------------------------------------------------------------------
Typ=1 Len=6: 195,162,194,130,194,172

select dump(y) from t42;

DUMP(Y)
--------------------------------------------------------------------------------
Typ=1 Len=6: 195,162,194,130,194,172

または16進数で:

select dump(dbms_lob.substr(x,3,1),16) from t42;

DUMP(DBMS_LOB.SUBSTR(X,3,1),16)
--------------------------------------------------------------------------------
Typ=1 Len=6: c3,a2,c2,82,c2,ac
于 2012-07-04T17:25:56.303 に答える