DB2 V9.7 for Linux, UNIX, and Windows

连接至 Unicode 数据库的应用程序

任何代码页环境中的应用程序都可以连接至 Unicode 数据库。对于连接至 Unicode 数据库的应用程序,数据库管理器将在应用程序代码页与数据库代码页(UTF-8)之间转换字符串数据。当 DB2® 将字符从代码页转换为 UTF-8 时,表示这些字符的总字节数可能扩展或收缩,这取决于字符的代码页和代码点。7 位 ASCII 在 UTF-8 中保持不变,并且每个 ASCII 字符需要一字节。每个非 ASCII 字符都变成多字节。有关 UTF-8 转换的更多信息,请参阅 Unicode 标准文档。
注: 适用于混合代码集中的应用程序的信息同样适用于连接至 Unicode 数据库的应用程序。

对于 Unicode 数据库,图形数据采用 UTF-16 大尾数法排序。如果使用 命令行处理器 来检索图形数据,那么图形字符也会转换为客户机代码页。此转换允许 命令行处理器 使用当前字体显示图形字符。每当数据库管理器将 UTF-16 字符转换为客户机代码页时,就会出现数据丢失。数据库管理器无法转换为客户机代码页中的有效字符的字符将替换为该代码页中的缺省替换字符。

从 DB2 V8 开始,数据库管理器将检查客户机的代码页设置,并对 UTF-16 图形数据执行所有必需转换。例如,如果非 Unicode 应用程序发送图形数据,那么 DB2 先将图形数据转换为 UTF-16,然后再将这些数据存储在 Unicode 数据库中。相反,如果非 Unicode 应用程序向 Unicode 数据库请求图形数据,那么在 DB2 将图形数据转换为应用程序代码页后,该应用程序才能访问这些数据。
注: 下列限制适用:
  • 当 DB2 EXPORT 实用程序用于将 DBCLOB 数据导出到具有 LOBSINFILE 或 LOBSINSEPFILE 文件类型修饰符的 EUC 代码页时,生成的 LOB 文件将包含 EUC 数据而不是 UCS-2 数据。
  • 从 Unicode 数据库到非 SBCS、非 EUC 或非 Unicode 应用程序中检索图形数据时,对于填充至 UTF-16 GRAPHIC 列的每个空格,DB2 会将其替换为 ASCII 空白字符(U+0020)。执行这种替换是因为纯 DBCS 代码页没有等价于 UTF-16 空格的字符。
  • 将日期、时间和时间戳记数据作为 GRAPHIC 数据类型从 Unicode 数据库检索到非 SBCS、非 EUC 或非 Unicode 应用程序中时,DB2 会将这些数据类型转换为替换字符。执行这种替换是因为 UTF-16 数据类型包含在纯 DBCS 代码页中没有等价字符的 SBCS 字符。

在版本 8 之前,DB2 不对 UTF-16 图形数据执行任何自动转换。非 Unicode 应用程序需执行必要的转换为 Unicode 的操作以及从 Unicode 转换回非 Unicode 的操作,或者设置 WCHARTYPE CONVERT 选项并使用 wchar_t。如果 V7 客户机连接至 DB2 V8 服务器,那么缺省情况下,数据库管理器对 UTF-16 图形数据执行数据转换。如果要覆盖此缺省行为,可以将 DB2GRAPHICUNICODESERVER 注册表变量设置为 OFF

对于连接至 DBCS 数据库的应用程序,图形数据将在应用程序 DBCS 代码页与数据库 DBCS 代码页之间转换。