My Oracle Support Banner

AL32UTF8/UTF8(Unicode)数据库字符集含义 (Doc ID 1946289.1)

Last updated on FEBRUARY 03, 2019

适用于:

Oracle Database - Enterprise Edition - 版本 8.0.3.0 和更高版本
Oracle Database - Standard Edition - 版本 8.0.3.0 和更高版本
本文档所含信息适用于所有平台

用途

对如何处理转换到 AL32UTF8 数据库字符集以及使用 Unicode 客户端的影响提供一些实用指导。
对于实际转换到 AL32UTF8 的文章,参见 <Note 260192.1> Changing the NLS_CHARACTERSET to AL32UTF8/UTF8 (Unicode)  in 8i, 9i , 10g and 11g 或者 <Note 1272374.1> The Database Migration Assistant for Unicode (DMU) Tool

虽然本文档描述的是转换到 AL32UTF8/UTF8,但大部分情形也适用于转换到其他多字节字符集(ZHS16GBK,ZHT16MSWIN950,ZHT16HKSCS,ZHT16HKSCS31,KO16MSWIN949,JA16SJIS ...),,您可以简单的将 AL32UTF8 替换成成 xx16xxxx 目标字符集。但是在这种情况下,转换成 AL32UTF8 显然是一个更好的主意。

适用范围

本文档采用 AL32UTF8,如果没有明确注明,所有信息同样适用于 UTF8。
注意 UTF8 和 AL32UTF8 是 Oracle 特定名称而 UTF-8(带一个 -)指的是 Unicode 标准的 UTF-8 编码方案。
 

重要提示:不要在低于 10.2.0.4(包括 10.1.0.5)的所有 10g 版本上通过 Expdp/Impdp 来转换到(AL32)UTF8 或者其他多字节字符集。11.1.0.6 也同样受到影响。
这样做会招致数据损坏,除非您在 impdp 端打上了 <Patch 5874989>,Expdp 不受到影响。旧的 exp/imp 工具不受到影响。该问题在 10.2.0.4 和 11.1.0.7 中被修复了。
对于 Windows 来说,该修复被包含在如下 Patch 中:
10.1.0.5.0 Patch 20 (10.1.0.5.20P) or later, see <Note 276548.1>
10.2.0.3.0 Patch 11 (10.2.0.3.11P) or later, see <Note 342443.1>

详细信息

To view full details, sign in with your My Oracle Support account.

Don't have a My Oracle Support account? Click to get started!


文档内容
用途
适用范围
详细信息
 A) 经常被问到的问题:
 A.1) 我需要使用 Nchar,Nvarchar2 或者 Nclob么?
 A.2) 我的操作系统需要支持 Unicode 或者我需要在 OS 里安装字符集么?
 A.3) Oracle RDBMS有哪些 Unicode 字符集和 Unicode 版本?
 A.4) Oracle AL32UTF8/UTF8 database 支持/定义了/识别我们插入的语言或者字符么?
 A.5) 怎样将一个非 Unicode NLS_CHARACTERSET 转换成 Unicode(AL32UTF8 或者 UTF8)?
 A.6) 我想同时升级 Oracle 版本和转换数据库字符集到 AL32UTF8,那么我应当在升级前还是升级后转换?
 A.7) 如何确认我的运行在 AL32UTF8 或者 UTF8 数据库上的应用是工作正常的?
 B) 服务器端影响
 B.1) 以 AL32UTF8 存储数据(insert 时的 ORA-01401/ORA-12899 错误)
 B.2) 如果使用 AL32UTF8 我的数据库会增长多少?
 B.3) 字符的码点(Codepoints)可能在 AL32UTF8 中发生改变
 B.4) SP2-0784, ORA-29275 和 ORA-600 [kole_t2u], [34] 错误/转换时丢失字符的含义
 B.5) 我是否需要把 UTF8 字符集转换成 AL32UTF8? 怎样从 UTF8 NLS_CHARACTERSET 转换到  AL32UTF8 NLS_CHARACTERSET?
 B.6) 导入数据到 AL32UTF8 数据库(或者使用 dblink 来转数据)发生的 ORA-01401 / ORA-12899 错误
 B.7) 对象或者用户名使用了非 US7ASCII  字符
 B.8) 在 Oracle 10g 及以下,用户的密码只能包含单字节数据
 B.9) 当使用 DBMS_LOB.LOADFROMFILE 时
 B.10) 当使用 UTL_FILE 时
 B.11) 当使用 sqlldr 或者外部表时
 B.12) 确保您没有在字符数据类型(CHAR,VARCHAR2,LONG,CLOB)中存放"binary" (比如 pdf,doc,docx,jpeg,png 等文件)或者加密数据(比如密码)
 B.13) 字符串函数是基于字符(characters)的而不是字节(byte)(比如 length,like,substr ...)
 B.14) LPad 和  Rpad 的计数是基于"显示单位"而不是字符
 B.15) 使用 LIKE 和 INSTR
 B.16) 返回字符值的字符函数可能静默截断数据
 B.17) 在 AL32UTF8 数据库和非 AL32UTF8 数据库之间通过 dblink(正向或反向)来创建(Materialized)Views/CTAS,列的 size 变成 2 倍或 3 倍
 B.18) 从非 AL32UTF8 数据库使用 cursors(PL/SQL)来 fetch 数据时的 ORA-01406 或者 ORA-06502 错误
 B.19) 当使用 HTMLDB 时
 B.20) 当使用非 US7ASCII 目录名称或者文件名时
 B.21) 当使用 XDB(xmltype)时
 B.22) Upper and NLS_upper give unexpected results on the Micro symbol or turkish i and I characters.
 B.23) Lower 和 NLS_lower 不能基于 Sigma 符号的位置正确地将希腊大写 Sigma/大写 Σ 转换成小写
 B.24) 当转换到  AL32UTF8 后 ORA-24816: Expanded non LONG bind data supplied after actual LONG or LOB column 错误可能会发生
 B.25) 对 CPU 和内存使用有何影响?
 C) 客户端
 C.1) 关于 NLS_LANG 常见误解
 C.3) 将您的 Microsoft Windows 客户端配置成一个 UTF-8(Unicode)客户端
 C.4) sqlplus 输出的默认列宽会改变
 C.5) 将您的 web 客户端配置成一个 UTF-8(Unicode)客户端
 C.6) 使用 Sqlplus 或者 Oracle SQLDeveloper 来运行插入非 US7ASCII 数据的脚本
 C.7) 当 NLS_LANG 设置成 UTF8 或者 AL32UTF8 时,使用 sqlplus spool 到文件变得非常慢
 C.8) 使用 Oracle Applications
 C.9) 使用 Portal
 C.10) Oracle Forms PDF 与 Unicode
 C.11) 将存放 OracleAS 10g Metadata Repository 的数据库转换成 AL32UTF8
 D) 已知问题
 E) 其他有用的参考
参考

My Oracle Support provides customers with access to over a million knowledge articles and a vibrant support community of peers and Oracle experts.