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 に答える