0

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

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

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

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

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

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

非常感谢。

4

1 回答 1

1

它的存储方式与 a 相同varchar2,并且看起来确实是 3 个字节。您可以使用该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

或十六进制:

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 回答