如何在非unicode字符集中配置的Oracle数据库中保存unicode字符(此配置无法更改)?
文本将保存在VARCHAR2列中(它不能是NVARCHAR2)。
答案 0 :(得分:2)
您可以通过多种方式在VARCHAR2
字段中存储任意数据(在本例中为UTF编码):
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.