欧元符号如何存储在Oracle的CLOB字段中(AL32UTF8字符集)?

时间:2012-07-04 15:40:14

标签: oracle utf-8 clob euro

我正在使用一个在WebSphere上运行并与Oracle数据库交互的Web应用程序(使用AL32UTF8字符集)。

如果我使用Web应用程序输入一些文本,然后按“保存”按钮,我希望将文本保存到Oracle数据库中的CLOB字段。 Web应用程序中有一些功能可以通过从数据库中检索文本来查看文本。

当我输入包含欧元符号(€)的文本时,按“保存”按钮,使用网络应用程序查看文本,我发现欧元符号已损坏为“?”。

我正在尝试查找数据库中的文本是否已损坏。

  1. 欧元符号是否在Oracle中存储为“0xE2 0x82 0xAC”(3个字节)?

  2. 如果是这种情况,是否有数据库查询可以确认? (假设该表名为SOME_TABLE,CLOB字段称为SOME_FIELD。)

  3. 非常感谢。

1 个答案:

答案 0 :(得分:1)

它以与varchar2相同的方式存储,看起来似乎是3个字节。你可以使用dump function查看它是如何存储的,但是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

或者以十六进制:

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