Oracle 数据库中的 Unicode 字符集 (文档 ID 1603267.1)

Oracle 数据库中的 Unicode 字符集 (文档 ID 1603267.1)

适用于:

Oracle Database - Standard Edition - 版本 7.0.16.0 和更高版本
Oracle Database Cloud Schema Service - 版本 N/A 和更高版本
Oracle Database Exadata Express Cloud Service - 版本 N/A 和更高版本
Oracle Database Exadata Cloud Machine - 版本 N/A 和更高版本
Oracle Cloud Infrastructure - Database Service - 版本 N/A 和更高版本
本文档所含信息适用于所有平台

用途

记录 Oracle 使用的各 Unicode 版本和编码。

适用范围

任何可能在 Oracle 中使用 Unicode 的人员。

另请参阅 Note 1051824.6 What languages are supported in an Unicode (UTF8/AL32UTF8) database? 和 Note 788156.1 AL32UTF8 / UTF8 (Unicode) Database Character Set Implications

详细信息

概述

Oracle 从 Oracle7 中开始对基于 Unicode 的字符集提供支持。下面是 Oracle 中所支持 Unicode 字符集的摘要:

字符集名称RDBMS 版本Unicode 版本
AL24UTFFSS7.2-8.11.1
UTF88.0-12c2.1 (8.0-8.1.6) , 3.0 (8.1.7-12.1)
UTFE8.0-12c2.1 (8.0-8.1.6) , 3.0 (8.1.7-12.1)
AL32UTF8*9.0-12c3.0 (9.0), 3.1 (9.2), 3.2 (10.1), 4.01 (10.2), 5.0 (11.1 and 11.2), 6.1 (12.1), 7.0(12.2), 9.0 (18.1)
AL16UTF16**9.0-12c3.0 (9.0), 3.1 (9.2), 3.2 (10.1), 4.01 (10.2), 5.0 (11.1 and 11.2), 6.1 (12.1), 7.0 (12.2), 9.0 (18.1),9.0 (19.1)

* 不能用作 NLS_NCHAR_CHARACTERSET,只能用作 NLS_CHARACTERSET
** 只能用作 NLS_NCHAR_CHARACTERSET,不能用作 NLS_CHARACTERSET

AL24UTFFSS

AL24UTFFSS 是 Oracle 支持的第一种 Unicode 字符集。该字符集在 Oracle 7.2 中引入。AL24UTFFSS 编码方案基于 Unicode 1.1 标准,该标准现在已废弃。从 Oracle9i 开始解除对 AL24UTFFSS 的支持。现有 AL24UTFFSS 数据库的移植路径是先将数据库升级到 8.0 或 8.1,然后再把字符集升级到 UTF8,之后将数据库进一步升级到 9i 或 10g。参见 Note 234381.1 Changing AL24UTFFSS to UTF8 - AL32UTF8 with ALTER DATABASE CHARACTERSET。

UTF8

UTF8 是 Oracle8 和 8i 中 UTF-8 编码的字符集。该字符集在 Oracle 8.0 到 8.1.6 遵守 Unicode 2.1 标准,在版本 8.1.7 时升级到 Unicode 版本 3.0。为了保持与现有安装兼容,在后来的 Oracle 版本(9i、10g、11g 和更高版本)中该字符集保持为 Unicode 3.0。
虽然在版本 3.1 之前未向 Unicode 分配特定补充字符(代理对),不过这些字符的分配已在 3.0 中定义。
在 UTF8 数据库中插入补充字符时,这些字符将不会破坏数据库内存储的实际数据。这些补充字符将被视为 2 个单独的未定义字符,在存储中占据 6 个字节。这种存储补充字符的方法在 Java 中称为“UTF-8 修正”,并在 CESU-8 标准中定义。
这种补充字符的“真实”示例包括部分 HKSCS 字符,请参阅 note:787371.1 Oracle Database Server support for HKCSC 1999, 2001 and 2004 character sets.
我们建议使用 UTF8 作为 NLS_CHARACTERSET 的客户切换到 AL32UTF8,以实现完整的补充字符支持。
虽然 UTF8 可用作 NLS_NCHAR_CHARACTERSET,Oracle 建议改为使用 AL16UTF16(请参阅下文)。

UTFE

这是面向 EDCDIC 平台的 UTF8 数据库字符集。它与基于 ASCII 的平台上的 UTF8 具有相同属性。EBCDIC Unicode 转换格式记录在 Unicode 技术报告 #16 UTF-EBCDIC 中,可在以下网址中找到 http://www.unicode.org/unicode/reports/tr16/

AL32UTF8

这是 Oracle9i 中引入的 UTF-8 编码字符集。AL32UTF8 是在发布 Oracle 基本版本时支持最新版本 Unicode 标准的数据库字符集。补丁集中未更新 AL32UTF8 的 Unicode 版本。
它还提供了对新定义的补充字符的支持。所有补充字符都以 4 个字节的方式存储。引入 AL32UTF8 是因为 UTF8 的设计(在 Oracle8 发布时)没有补充字符的概念,因此 UTF8 的每个字符最多为 3 个字节。更改 UTF8 的设计将破坏向后兼容性,因此引入了新字符集。代理对的引入意味着未来版本的 Unicode 标准无需进行重大的体系结构更改,因此当前的计划是根据需要继续改进 AL32UTF8 以支持未来版本的 Unicode 标准。
例如,在 Oracle 10.1 中,此字符集实施 Unicode 3.2 标准,在 Oracle 10.2 中更新为支持 Unicode 4.01 标准,在 Oracle 11.1 为 5.0,到 12.1 为 6.1,到12.2是7.0,而到18.1, 19.1则为9.0。
AL32UTF8 不能用作 NLS_NCHAR_CHARACTERSET,只能用作 NLS_CHARACTERSET。

请注意,Oracle9 之前的软件在连接到 AL32UTF8 数据库时可能会出现一些严重问题。请参阅以下关于这些问题的说明:Note 237593.1 Problems connecting to AL32UTF8 databases from older versions (8i and lower)
有关使用 UTF8/AL32UTF8 的一些实用信息,请参阅 Note 788156.1 AL32UTF8 / UTF8 (Unicode) Database Character Set Implications

AL16UTF16

这是 Oracle 中引入的第一种 UTF-16 编码字符集。该字符集在 Oracle9i 中作为默认国际化字符集 (NLS_NCHAR_CHARACTERSET) 引入,用于 Nchar、Nvarchar2 和 Nclob 数据类型。
AL16UTF16 在发布 Oracle 基本版本时支持最新版本的 Unicode 标准。补丁集中未更新 AL16UTF16 的 Unicode 版本。
它还提供了对新定义的补充字符的支持。所有补充字符都以 4 个字节的方式存储。同 AL32UTF8 一样,计划是根据需要继续改进 AL16UTF16 以支持未来版本的 Unicode 标准。对于指定的 Oracle RDBMS 版本,AL16UTF16 使用与 AL32UTF8 相同的 Unicode 版本。

AL16UTF16 不能用作数据库字符集 (NLS_CHARACTERSET),只能用作国际化字符集 (NLS_NCHAR_CHARACTERSET)。数据库字符集用于识别和保存 SQL、SQL 元数据及 PL/SQL 源代码。根据部署平台上的本地情况,它必须具有单字节 7 位 ASCII 或单字节 EBCDIC 作为严格子集(= A-Z、a-z、0-9 具有与 US7ASCII/EBCDIC 中相同的代码)。因此,无法使用 16 位字符集(例如 AL16UTF16)作为数据库字符集。

在 9i 和更高版本中尝试使用 AL16UTF16 作为字符集 (NLS_CHARACTERSET) 创建数据库时将出现 "ORA-12706: THIS CREATE DATABASE CHARACTER SET IS NOT ALLOWED"。
AL16UTF16 始终采用高位优先字节顺序,不考虑处理器的字节顺序。

 

仅在少数情况下使用国际化字符集才真正有优势,而且总的来说包括其它方案提供商也很少提供对 N-types 的程序支持。
使用 N-types 需要客户端应用程序层面的明确支持。
所以 Oracle 强烈建议使用 AL32UTF8 并使用 “普通”的 CHAR, VARCHAR2 或 CLOB,而不是 Nchar, Nvarchar2 和 Nclob 数据类型。

在 Oracle 中有一个名为 AL16UTF16LE 的字符集,只能用于“低位优先”UTF-16/UCS-2 数据的转换。AL16UTF16LE 不能用作数据库字符集。

是否会对 UTF8/AL32UTF8 进行更改/解除支持?

有个问题经常提到,就是 Unicode 是否“稳定”;以及在版本 x 中是否会对某种选项支持或解除支持。
AL24UTFFSS 已解除支持并且已废弃。
当前没有解除支持 UTF8 的计划,我们只是鼓励所有客户使用 AL32UTF8。UTF8 中定义的所有代码点在 AL32UTF8 中也有效,因此从 UTF8 转换为 AL32UTF8 永远不会有数据丢失。
没有采用其他 Unicode 字符集的计划,AL32UTF8 已具有足够的灵活性(与 UTF8 不同)来集成未来对 Unicode 标准的更改。
Unicode 标准自身确保了版本 2 之后的编码稳定性:http://www.unicode.org/policies/stability_policy.html(表示不会删除任何字符或更改代码点,因此在 Unicode 版本 x 中有效的任意字符在版本 x+1 中仍将有效)。

Unicode 版本和 ISO/IEC 10646 标准。

有关完整概览,请参阅 http://www.unicode.org/versions/Unicode6.1.0/appC.pdf and http://www.unicode.org/versions/



下面是该文档的基本摘要:

* ISO/IEC 10646-1:1993 ≈ Unicode 1.1
* ISO/IEC 10646-1:2000 ≈ Unicode 3.0
* ISO/IEC 10646-2:2001 ≈ Unicode 3.1
* ISO/IEC 10646-2:2001,带修订 1 ≈ Unicode 3.2
* ISO/IEC 10646:2003,带修订 1 ≈ Unicode 4.1
* ISO/IEC 10646:2003,带修订 1 和 2 ≈ Unicode 5.0
* ISO/IEC 10646:2003,带修订 1 到 6 ≈ Unicode 5.2
* ISO/IEC 10646:2011 ≈ Unicode 6.1
* ISO/IEC 10646:2012 带修订 1 到 2 ≈ Unicode 7.0

 

参考文献

白皮书“Oracle Unicode database support”包含一些详细信息,可从以下网址获取: http://otn.oracle.com/tech/globalization/pdf/TWP_Unicode_10gR1.pdf

所有 Unicode 版本(及更多内容)见以下网址:http://www.unicode.org/Public/ 和 http://www.unicode.org/unicode/standard/versions/enumeratedversions.html

有关 Unicode 术语的词汇表,请参阅:http://www.unicode.org/glossary/

以下 URL 包含各 Unicode 版本的十六进制值和字符说明的完整列表(文件相当大!)

Unicode Version 9.0: http://www.unicode.org/Public/9.0.0/ucd/UnicodeData.txt

Unicode 版本 7.0: http://www.unicode.org/Public/7.0.0/ucd/UnicodeData.txt

Unicode 版本 6.1: http://www.unicode.org/Public/6.1.0/ucd/UnicodeData.txt
Unicode 版本 5.2: http://www.unicode.org/Public/5.2.0/ucd/UnicodeData.txt
Unicode 版本 5.0: http://www.unicode.org/Public/5.0.0/ucd/UnicodeData.txt
Unicode 版本 4.0.1: http://www.unicode.org/Public/4.0-Update1/UnicodeData-4.0.1.txt
Unicode 版本 3.2: http://www.unicode.org/Public/3.2-Update/UnicodeData-3.2.0.txt
Unicode 版本 3.1: http://www.unicode.org/Public/3.1-Update/UnicodeData-3.1.0.txt
Unicode 版本 3.0: http://www.unicode.org/Public/3.0-Update/UnicodeData-3.0.0.txt
Unicode 版本 2.1: http://www.unicode.org/Public/2.1-Update4/UnicodeData-2.1.9.txt
Unicode 版本 1.1: http://www.unicode.org/Public/1.1-Update/UnicodeData-1.1.5.txt
文件格式的说明见以下网址:http://www.unicode.org/Public/UNIDATA/UCD.html

在以上位置可以找到 Unicode 标准,其中所有字符均使用 UTF-16 代码点引用。

参考

NOTE:258114.1 - Possible action for CLOB/NCLOB storage after upgrade From 9i or lower to 10g and higher
NOTE:234381.1 - Changing AL24UTFFSS to UTF8 - AL32UTF8 with ALTER DATABASE CHARACTERSET
NOTE:237593.1 - Problems connecting to AL32UTF8 databases from older versions (8i and lower)
NOTE:788156.1 - AL32UTF8 / UTF8 (Unicode) Database Character Set Implications

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值