如何使用VARCHAR2在unicode Oracle数据库中保存unicode列?

时间:2012-09-05 14:16:10

标签: database oracle unicode non-unicode

如何在非unicode字符集中配置的Oracle数据库中保存unicode字符(此配置无法更改)?

文本将保存在VARCHAR2列中(它不能是NVARCHAR2)。

1 个答案:

答案 0 :(得分:2)

您可以通过多种方式在VARCHAR2字段中存储任意数据(在本例中为UTF编码):

  • 您可以将Unicode字符转换为U+XXXX form或其&#YYYY形式。只有部分角色需要转换。
  • 您可以存储二进制数据rawtohex - 编码。
  • 您还可以使用标准功能,例如UTL_ENCODE.mimeheader_encode

    /* needs to be checked on a non-unicode db */ 
    SQL> declare
      2     l nvarchar2(200);
      3     p nvarchar2(200);
      4  begin
      5     l := UTL_ENCODE.MIMEHEADER_ENCODE (
      6        buf            => nchr(352),--'Š',
      7        encode_charset => 'UTF8',
      8        encoding       => UTL_ENCODE.QUOTED_PRINTABLE
      9     );
     10     dbms_output.put_line('encoded string: ' || l);
     11     p := utl_encode.mimeheader_decode (
     12        buf => l
     13     );
     14     dbms_output.put_line('decoded string: ' || p);
     15  end;
     16  /
    
    encoded string: =?UTF8?Q?=C5=A0?=
    decoded string: Š
    
    Statement processed.