我正在使用一个在WebSphere上运行并与Oracle数据库交互的Web应用程序(使用AL32UTF8字符集)。
如果我使用Web应用程序输入一些文本,然后按“保存”按钮,我希望将文本保存到Oracle数据库中的CLOB字段。 Web应用程序中有一些功能可以通过从数据库中检索文本来查看文本。
当我输入包含欧元符号(€)的文本时,按“保存”按钮,使用网络应用程序查看文本,我发现欧元符号已损坏为“?”。
我正在尝试查找数据库中的文本是否已损坏。
欧元符号是否在Oracle中存储为“0xE2 0x82 0xAC”(3个字节)?
如果是这种情况,是否有数据库查询可以确认? (假设该表名为SOME_TABLE,CLOB字段称为SOME_FIELD。)
非常感谢。
答案 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