0

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

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

4

1 回答 1

2

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

  • 您可以将 Unicode 字符转换为它们的U+XXXX形式或它们的&#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.
    
于 2012-09-05T14:32:41.800 回答