2012-07-04 49 views
0

我正在使用在WebSphere上运行并与Oracle数据库交互的Web应用程序(使用AL32UTF8字符集)。欧元符号如何存储在Oracle(AL32UTF8字符集)中的CLOB字段中?

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

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

我想查找文本是否在数据库中损坏。

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

  2. 如果是这样,是否有数据库查询可以证实这一点? (可以说这个表叫做SOME_TABLE,而CLOB字段叫做SOME_FIELD。)

非常感谢。

回答

1

它的存储方式与varchar2相同,看起来是3个字节。您可以使用dump function来查看它是如何存储的,但使用clob您需要提取相关字符(本例中为3字节),例如与dbms_lob.substr。这是11gR2的Linux上:

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 
相关问题