【问题标题】:How is euro sign stored in CLOB field in Oracle (AL32UTF8 character set)?欧元符号如何存储在 Oracle 的 CLOB 字段中(AL32UTF8 字符集)?
【发布时间】:2012-07-05 03:15:43
【问题描述】:

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

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

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

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

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

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

非常感谢。

【问题讨论】:

    标签: oracle utf-8 clob euro


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2019-03-16
      • 2018-07-23
      • 2010-09-27
      • 1970-01-01
      • 1970-01-01
      • 2018-09-18
      • 2015-10-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多