Unicode 标准是编写的字符和文本的通用字符编码方案。它非常精确地定义字符集,并为它定义少量的编码。它定义对多语言文本进行编码所采用的一致方式,这允许在国际间进行文本数据交换,同时也创建了软件全球化的基础。
Unicode 提供的两种编码方案是 UTF-16 和 UTF-8。
缺省编码方案是 UTF-16,它采用 16 位编码格式。UCS-2 是 UTF-16 的子集,它使用两个字节来表示一个字符。UCS-2 通常被认为是能够表示所有现有单字节和双字节代码页中的所有必需字符的通用代码页。UCS-2 在 IBM 公司被注册为代码页 1200。
另一 Unicode 编码格式是 UTF-8,它是面向字节的,并且已经被设计为更易于配合现有的基于 ASCII 的系统使用。UTF-8 使用变化的字节数(通常为 1-3,有时为 4)来存储每个字符。不可变的 ASCII 字符被作为单个字节存储下来。所有其他字符都是使用多字节来存储的。通常,UTF-8 数据可被未对多字节代码页指定的代码视作扩充 ASCII 数据。UTF-8 在 IBM 公司被注册为代码页 1208。
非常重要的一点是,当在本地代码页、UCS-2 和 UTF-8 之间转换数据时,应用程序应考虑这些数据的需求。例如,在 UCS-2 中,20 个字符刚好需要 40 个字节,而在 UTF-8 中,有时需要 20 到 60 个字节,这取决于原始代码页和所使用的字符。
通过指定代码集 UTF-8 创建的 DB2 通用数据库 Unix 版、Windows 版或 OS/2 版可以用来存储 UCS-2 和 UTF-8 格式的数据。这种数据库被称为 Unicode 数据库。SQL 字符数据是使用 UTF-8 编码的,而 SQL 图形数据是使用 UCS-2 编码的。这意味着 MBCS 字符(包括单字节和双字节字符)存储在字符列中,而 DBCS 字符存储在图形列中。
应用程序的代码页可能与 DB2 用来存储数据的代码页不匹配。在非 Unicode 数据库中,当代码页不相同时,数据库管理器会对在客户机和服务器之间传送的字符和图形(纯 DBCS)数据进行转换。在 Unicode 数据库中,客户机代码页与 UTF-8 之间的字符数据转换是由数据库管理器自动执行的,但是所有图形(UCS-2)数据在传送时在客户机和服务器之间没有执行任何转换。
注:
应用程序可以指定 UTF-8 代码页,指示它将发送和接收采用 UCS-2 格式的所有图形数据以及采用 UTF-8 的字符数据。此应用程序代码页仅用于 Unicode 数据库时才是受支持的。
使用 Unicode 时应考虑的其他事项:
CREATE DATABASE unidb USING CODESET UTF-8 TERRITORY US
db2set DB2CODEPAGE=1208
SELECT * FROM mytable WHERE mychar = 'utf-8 data' AND mygraphic = G'ucs-2 data'
这些《发行说明》包括对下列有关将 Unicode 与 DB2 版本 7.1 配合使用的信息的更新:
Chapter 3. Language Elements
Chapter 4. Functions
|Chapter 6. SQL Statements
Chapter 3. Using Advanced Features
Appendix C. DB2 CLI and ODBC
有关将 Unicode 与 DB2 配合使用的更多信息,参考《管理指南》的『本地语言支持(NLS)』附录:『DB2 UDB 中的 Unicode 支持』。