http://www.ibm.com/developerworks/cn/data/library/techarticles/0209kline/0209kline.html#resources
在英语 OS 上设置 DB2 UDB 版本 8 中的混合字节字符集(MBCS)数据库
本文将说明开发人员如何在英语 Windows 操作系统或 AIX 操作系统上,对正在运行的、使用混合字节字符集(mixed-byte character set (MBCS))的数据库的应用程序进行测试。现在,许多开发人员面对着这样的需求:以各种语言运行数据库测试,但他们没有或不想要更多硬件资源,以便在专用机器上测试每种语言。通过支持英语操作系统来执行针对多个异构数据库的测试,所需的硬件最少,因此降低了成本并提高了效率。
在位于达拉斯的开发人员技术支持中心,我们发现大多数在 DB2 上使用多语言支持方面需要获得帮助的独立软件供应商(Independent Software Vendor (ISV))询问的都是:如何为 MBCS 支持设置数据库和操作系统环境。因此,本文是针对开发人员和需要在英文操作系统环境中的 DB2 Universal Database™ 版本 8 上设置 MBCS 的其它读者(如与我们合作的 ISV)而写的。本文中的基本准则也适用于任何单字节字符集(SBCS)语言环境。
我们将向您提供详细信息,使您在 Windows® 和 AIX® 环境中,都能从 DB2 命令窗口(Command Window)创建、连接 MBCS 数据库和对其执行 SQL 测试。UTF-8 数据库也可用于多语言环境,但这里我们将不涉及该主题,因为它在本文讨论范围之外。请注意 UTF-8 有一些值得仔细研究的好处。在本文结束部分,您将看到至 UTF-8 信息以及其它代码页相关主题的链接。
我们将在本文中通篇使用一个日语示例来设置 MBCS 环境、创建数据库和执行 SQL 测试。
欧洲语言是用字母文字书写的,它们作为指示发音的符号而显示。远东语言是用象形文字书写的,它们以抽象方式表示字的意义。象形字符集比字母字符集大很多,因此引入了混合字节字符集(MBCS)支持来克服单字节字符集(SBCS)256 个字符的限制。
人们使用了两种方法来解决字符限制问题:双字节字符集(DBCS)和混合字节字符集(MBCS)。这些字符集分为两个类别:
- 通用语言支持— 对许多种语言提供支持的字符集(UTF 和 UCS)
- 单一语言支持— 每种字符集专用于特定语言和平台。
本文描述单一语言支持。我们将日语支持用作示例进行说明。
可以用两种方法之一来编码日语象形字符:
- Shift-JIS(SJIS)编码方案
SJIS 用于 IBM-932 和较新的 IBM-943 代码集。可以在大多数平台上使用这些代码集。每个字符的第一个字节用来确定该字符的字节数。但有例外,从 0x20 到 0x7F 和从 0xA0 到 0xDF 的值用来编码 ASCII 和片假名字符。从 0x81 到 0x9f 和从 0xe0 到 0xfc 的位置保留,用作多字节字符的第一个字节。将 JISX0208 字符映射到从 0x8140 开始的多字节值。多字节字符的第二个字节可以是任何值。 - 扩展 UNIX® 代码(Extended UNIX® Code (EUC))编码方案。IBM-eucJP 代码集可用于 UNIX 平台。EUC 编码方案定义了一组可以支持一至四个字符集的编码规则。如果您计划在数据库中存储某些图形字符,则这种对于多个字符集的支持可能是必要的。基于 EUC 的代码集遵守 EUC 编码规则,但也标识与特定实例相关联的特定字符集。例如,用于日语的 IBM-eucJP 根据 EUC 编码规则引用日本工业标准(Japanese Industrial Standard)字符的编码。
第一个集 — 字符集 O(CSO)总是包含 ASCII 字符集。所有其它集都必须将最高位(MSB)设置为 1 并可以使用任意数目的字节来编码字符。此外,字符集中的所有字符必须具有:
- 相同的字节数来编码所有字符
- 相同的列显示宽度(在固定宽度的终端上的列数)。
第三个集(CS2)中的所有字符总是以控制字符 SS2(single-shift 2,0x8E)开头。符合 EUC 的代码集仅将 SS2 控制字符用于标识第三个集。第四个集(CS3)中的所有字符总是以控制字符 SS3(single-shift 3,0x8F)开头。符合 EUC 的代码集仅将 SS3 控制字符用于标识第四个集。
以下是 EUC 所支持的不同代码集的格式:
CS0 - 0xxxxxxx CS1 - 1xxxxxxx or 1xxxxxxx 1xxxxxxx or 1xxxxxxx 1xxxxxxx 1xxxxxxx CS2 - 10001110 1xxxxxxx or 10001110 1xxxxxxx 1xxxxxxx or 10001110 1xxxxxxx 1xxxxxxx 1xxxxxxx CS3 - 10001111 1xxxxxxx or 10001111 1xxxxxxx 1xxxxxxx or 10001111 1xxxxxxx 1xxxxxxx 1xxxxxxx |
假定您安装了具有服务器能力的 DB2 UDB 修订版,则我们可以继续下去,介绍环境设置。环境的设置会因您选择的操作系统而异。我们将首先说明 Windows上的设置过程,然后提供用于 AIX的指示。
注:下面的指示适用于设置您的环境以便从 DB2 命令窗口进行测试。如果您只对设置环境以便从应用程序(而不是 DB2 命令窗口会话)进行测试感兴趣,则下面设置环境的步骤将不适用。相反,您将需要从 DB2 命令窗口执行下列命令:
db2set DB2CODEPAGE=<codepage of your application> |
我们强烈建议:一旦完成测试,就立即将 DB2CODEPAGE 环境变量复位到其最初状态。继续启用这个变量可能引起问题。要禁用该变量,输入下列命令:
db2set DB2CODEPAGE= |
如果您计划使用 DB2CODEPAGE
,可以跳到 创建 MBCS 数据库。
要在 Windows 上进行配置,您必须首先安装 DB2 消息文件集,然后设置代码页转换文件集。
安装 DB2 消息
为了便于 DB2 在执行 DB2 命令或语句之后显示错误、警告和指示性消息,必须安装您期望使用的语言的 DB2 消息文件集。因为 DB2 有基于语言分组的不同分发版,您必须验证安装 CD-ROM 上有您期望的语言。在 Windows 上,您可以选择在 DB2 安装时添加针对某种语言的特定消息集。对于版本 7,您仅可以安装一种语言,但在版本 8 上,您可以选择安装多种语言。如果您计划在几种语言环境之间进行切换,那么这个新特性是特别棒的。安装期间是您为特定语言安装 DB2 消息的唯一机会。请注意:在安装过程中,您必须选择 Custom Install而不是 Typical Install。
在为 DB2 安装了消息文件集之后,您就能在执行 DB2 命令或 SQL 语句后看到 DB2 错误、警告和指示性消息。以下是一个英语消息示例:
C:\PROGRA~1\SQLLIB\BIN>db2 "connect to jpdb" SQL0332N There is no available conversion for the source code page "1252" to the target code page "943". Reason Code "1". SQLSTATE=57017 |
不必为了创建和运行 MBCS 数据库而安装特定语言的 DB2 消息。它只是提供了用您选择的语言显示消息的便利。
设置代码页转换文件集
设置您环境的下一个步骤取决于您所选择的语言。在示例中,我们将设置日语环境。为了设置 Windows 环境以处理日语代码页转换,我们必须在 Windows 机器上的 Regional Options中更改一些设置。
- 单击 Start--> Settings-> Control Panel,然后单击 Regional Options,打开 图 1 中所示的弹出对话框。
图 1. Windows 环境中的 Regional Options - 在对话框顶部,选择 Japanese作为您的语言环境。语言环境将影响数字、货币、时间、日期和输入文本将使用的语言。
- 在对话框底部,单击 Set default,然后单击 OK。(请参阅 图 2。)这一规定允许应用程序用其本地语言显示菜单和对话框而不影响 Windows 菜单和对话框。
图 2. 语言环境对话框 - 单击 Regional Options对话框的 OK,它打开 图 3 中所示的对话框。
图 3. 安装对话框 - 很可能您的机器上已经有文件了,因此可以单击 Yes来从您的硬盘安装它们。如果您的驱动器上没有这些文件,那么,将提示您插入 Windows 安装 CD-ROM 以便获取文件。
- 因为在安装这些文件后,将会使操作系统的注册表发生更改,所以在准备好创建数据库之前,您必须重新引导机器。
要在 AIX 上进行配置,您必须首先安装 DB2 消息文件集,然后设置代码页转换文件集。
安装 DB2 消息
在 AIX 上,可以通过安装 CD-ROM 上的 db2setup
或通过 SMIT 来安装 DB2 消息。 db2setup
是允许您安装 DB2 组件(如 DB2 消息文件集)的可执行文件。DB2 在 AIX 上提供这些消息以在 DB2 命令或 SQL 语句执行之后显示错误、警告和指示性消息,正如它在 Windows 上所做的一样。在安装 DB2 之后,您可以随时添加附加的语言文件集,这允许您显示与当前语言环境相关联的 DB2 消息。
版本 7 和版本 8 都允许您安装多种语言消息文件集,当您需要从一种语言环境切换到另一种时,这提供了灵活性。当 DB2 检测到 LANG 环境变量更改时,它会自动切换消息文件集。缺省情况下,安装英语消息。
不必将数据库的特定语言调整到您期望的环境。例如,不必为运行日语数据库而安装 DB2 的日语消息文件集。如果不能找到日语消息文件集,DB2 将使用英语消息。
设置代码页转换文件集
下一步是查看您是否有特定于操作系统的文件集来启用从源代码页到 MBCS 代码页的代码页转换。您可以通过执行下列命令,观察结果输出以检查是否已安装那些文件集:
lslpp -l | grep bos.loc.pc.Ja_JP (for SJIS) bos.loc.pc.Ja_JP 4.3.3.0 COMMITTED Base System Locale PC Code Set lslpp -l | grep bos.loc.iso.ja_JP bos.loc.iso.ja_JP 4.3.3.0 COMMITTED Base System Locale ISO Code |
如您所见,日语文件集已安装,因此不必再安装任何文件集了。以下是从 AIX 4.3.3 安装 CD-ROM 集安装文件集的命令示例:
installp -acgNqwX -d /dev/cd0 -f File 2>&&1 File: bos.loc.iso.ja_JP 4.3.3.0 bos.loc.pc.Ja_JP 4.3.3.0 |
在您应用了文件集之后,必须将 LANG 环境变量设置为该语言类型。以下是用于特定的日语环境的命令:
$export LANG=Ja_JP |
请确保安装了文件集以及正确设置了 LANG 环境变量。当您尝试连接到 MBCS 数据库时,不满足这些需求将触发下列错误:
$ db2 "connect to jpdb" SQL0332N There is no available conversion for the source code page "819" to the target code page "943". Reason Code "1". SQLSTATE=57017 |
如果您经常切换语言环境,那么,您需要执行 db2 terminate
来终止可能记住旧 LANG 环境的现有后台进程,然后连接到数据库。
您可以选择在启用特定语言环境之前或之后创建您的 MBCS 数据库。如果您希望首先创建数据库,则必须在执行 CREATE DATABASE 命令时提供额外的信息。否则 DB2 将采用来自语言环境的缺省代码页。
下面,我们将在启用日语语言环境之前创建日语数据库:
db2 "create database jpdb using codeset IBM-943 territory JP" |
CODESET 关键字告知 DB2 用代码页 943(一种日语代码页)创建数据库。
如果您在设置了语言环境之后创建数据库,或使用 db2set 将 DB2CODEPAGE 环境变量设置为指定的代码页(请参阅 设置环境),则您所要做的一切就是输入下列命令:
db2 "create database jpdb" |
因为已经设置了日语环境,所以 DB2 会知道在 Windows 上用代码集 IBM-943 创建日语数据库。在 AIX 上,DB2 引用 LANG 环境变量来确定数据库的代码页。如果设置了 DB2CODEPAGE,DB2 会根据这个 DB2 环境变量,而不是检查 LANG 环境变量(在 AIX 上)或操作系统代码页(在 Windows 上)来确定用于创建数据库的代码页。
DB2 提供了许多代码集,因此您可以在自己选择的平台上使用正确的代码页来创建数据库。 表 1显示了支持的日语代码集。
表 1. 支持的日语代码集 | |||||||
代码页 | 分组 | 代码集 | 地域标识符 | 国家/地区代码 | 语言环境 | 操作系统 | 国家/地区名称 |
932 | D-1 | IBM-932 | JP | 81 | - | OS2 | 日本 |
942 | D-1 | IBM-942 | JP | 81 | - | OS2 | 日本 |
943 | D-1 | IBM-943 | JP | 81 | - | OS2 | 日本 |
954 | D-1 | IBM-9eucJP | JP | 81 | ja_JP | AIX | 日本 |
943* | D-1 | IBM-943 | JP | 81 | Ja_JP | AIX | 日本 |
954 | D-1 | eucJP | JP | 81 | ja_JP.eucJP | HP | 日本 |
5,039 | D-1 | SJIS | JP | 81 | ja_JP.SJIS | HP | 日本 |
954 | D-1 | eucJP | JP | 81 | ja_JP.eucJP | HP | 日本 |
954 | D-1 | eucJP | JP | 81 | ja | SCO | 日本 |
954 | D-1 | eucJP | JP | 81 | ja_JP | SCO | 日本 |
954 | D-1 | eucJP | JP | 81 | ja_JP.EUC | SCO | 日本 |
954 | D-1 | eucJP | JP | 81 | ja_JP.eucJP | SCO | 日本 |
954 | D-1 | eucJP | JP | 81 | ja | Sun | 日本 |
943 | D-1 | IBM-943 | JP | 81 |