CSDN博客

img naxin

在英语 OS 上设置 DB2 UDB 版本 8 中的混合字节字符集(MBCS)数据库

发表于2004/9/16 22:02:00  1729人阅读

分类: 03. Database 技术

copy from : http://www-900.ibm.com/developerWorks/cn/dmdd/library/techarticles/0209kline/0209kline.shtml

 

在英语 OS 上设置 DB2 UDB 版本 8 中的混合字节字符集(MBCS)数据库

David J Kline
Gabor Wieser
DB2® Vendor Enablement,PartnerWorld® for Developers
IBM 开发人员技术支持(Developer Technical Support (DTS))中心 — 达拉斯
2002 年 9 月

 
  内容  
简介
字符集编码简明提要
设置环境
   Windows 上的配置
   AIX 上的配置
创建 MBCS 数据库
连接到数据库并执行基本 SQL 测试
结束语

© 2002 International Business Machines Corporation. All rights reserved.

简介

本文将说明开发人员如何在英语 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 上的配置

要在 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 中更改一些设置。

  1. 单击 Start--> Settings-> Control Panel,然后单击 Regional Options,打开图 1 中所示的弹出对话框。

    图 1. Windows 环境中的 Regional Options
    图 1. Windows 环境中的 Regional Options

  2. 在对话框顶部,选择 Japanese 作为您的语言环境。语言环境将影响数字、货币、时间、日期和输入文本将使用的语言。
  3. 在对话框底部,单击 Set default,然后单击 OK。(请参阅图 2。)这一规定允许应用程序用其本地语言显示菜单和对话框而不影响 Windows 菜单和对话框。

    图 2. 语言环境对话框
    图 2. 语言环境对话框

  4. 单击 Regional Options 对话框的 OK,它打开图 3 中所示的对话框。

    图 3. 安装对话框
    图 3. 安装对话框

  5. 很可能您的机器上已经有文件了,因此可以单击 Yes 来从您的硬盘安装它们。如果您的驱动器上没有这些文件,那么,将提示您插入 Windows 安装 CD-ROM 以便获取文件。
  6. 因为在安装这些文件后,将会使操作系统的注册表发生更改,所以在准备好创建数据库之前,您必须重新引导机器。

AIX 上的配置

要在 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 数据库

您可以选择在启用特定语言环境之前或之后创建您的 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 Ja_JP.PCK Sun 日本
954 D-1 EUC_JP JP 81 ja_JP Linux 日本
943 D-1 IBM-943 JP 81 - WIN 日本
930 D-1 IBM-930 JP 81 - HOST 日本
939 D-1 IBM-939 JP 81 - HOST 日本
5,026 D-1 IBM-5,026 JP 81 - HOST 日本
5,035 D-1 IBM-5,035 JP 81 - HOST 日本
1,390 D-1 - JP 81 - HOST 日本
1,399 D-1 - JP 81 - HOST 日本
1394** D-1 - JP 81 - - 日本

* 在 AIX 4.3 或更新的版本上该代码页是 943。如果您使用 AIX 4.2 或更早的版本,则该代码页是 932。
** 只有将数据用 LOAD 或 IMPORT 实用程序从代码页 1394 转移至 DB2 Unicode 数据库,或用 EXPORT 实用程序将数据从 DB2 Unicode 数据库导出成代码页 1394 时,才使用代码页 1394。要获取更多信息,请参阅 Version 7.2 FixPak 4 Release Notes 的 Data Movement Utilities Guide and Reference 部分。

要获取代码集的完整列表,请参阅参考资料

为了确定数据库是否正在使用您期望的代码页,可以用下列命令查询数据库配置文件:

db2 "get database configuration for <database name>"

在输出的顶部附近,您会看到与语言和代码页相关的信息列表:

Database territory                          = JP
Database code page                          = 943
Database code set                           = IBM-943
Database country code                       = 81

连接到数据库并执行基本 SQL 测试

连接到数据库

下列示例显示了在 DB2 服务器上如何在本地从 DB2 命令窗口连接到数据库:

       db2 "connect to <database name>"

要连接到远程数据库,您需要包含 userusing 关键字:

db2 "connect to <database name> user <user id> using <password>"

执行基本 SQL 测试

要执行象 insert 和 select 语句这样的 SQL 测试,您需要能够从键盘将 MBCS 数据输入到屏幕。在示例中,我们使用英语键盘来执行 MBCS 文本输入操作。此外,我们还将使用日语来向您展示如何做到这一点。

Windows

对于 Windows,您需要打开一个 DB2 Command Window 会话并输入以下命令:

       chcp <code page>

chcp 是特定于 Windows 的命令。它代表“更改代码页(change code page)”,您需要执行它,以便您的 DB2 命令窗口会话可以对 MBCS 字符进行输入和检索。在示例中,我们将代码页更改为 932,已证实 932 作为 943 代码页数据库的输入可以正常工作。

在执行了 chcp 命令之后,您就可以开始测试 MBCS 数据库了。您应该在 Windows 屏幕的右下角看到下列图标:

日语图标
日语图标

英语图标
英语图标

这两个图标中的任意一个将被显示,这允许您在英语和日语输入语言环境之间进行切换。如果您正在使用另一种输入语言环境,则您将看到用于该语言环境的适当图标,但英语图标仍然和上面所示的相同。确保显示了非英语图标。如果显示的是英语图标,则在该图标上单击,下列列表将允许您选择非英语设置选项:

英语/日语下拉列表

如果您有激活的编辑器,并且它支持显示您的语言所需的字体,那么您还会看到类似于下面所示的对话框工具箱。这个工具箱位于您 Windows 屏幕的右下角。

工具箱

您需要设置工具箱以便可以输入正确的字符集。例如,日语有几种字符集,如片假名和平假名。在工具箱中单击下面的图标,选择您需要的字符集:

工具箱图标

现在,让我们在连接到日语数据库之后执行一些操作。首先,我们想创建一个表以允许插入字符串:

db2 "create table jptbl (name varchar(20))"

迄今为止,我们还没有使用日语字符,因此我们当前的输入是英语。现在,我们要将一行插入该表:

插入日语字符的示例

在完成上述步骤之后,可以用任何编辑器(如 Notepad)将字符输入、复制和粘贴到 DB2 命令窗口会话上的 insert 语句中。请确保在您的编辑器中选择的字体允许输入特定于您的语言的字符。

以下是从 DB2 命令窗口运行 insert 之后的结果:

成功地插入日语字符的示例

现在,从表中进行 select:

带日语字符的 select

AIX

在 AIX 上,在 MBCS 数据库上测试 SQL 语句的最简单方法是从 Windows 机器连接到数据库。要做到这一点,您必须在 Windows 机器上运行 DB2 客户机,并能够对驻留在服务器上的 MBCS 数据库进行编目。做到这一点的更可取的方法是通过使用 DB2 Client Configuration Assistant;这是一种协助用户逐步完成数据库编目过程的 GUI 工具。一旦完成了这个过程,您就可以象在本地 DB2 服务器一样,从客户机 Windows 机器输入 SQL 语句。

结束语

那些遇到问题后需要快速解决方案的开发人员经常会遇到新的挑战(如使用 MBCS 数据库)。本文的目标是通过提供高质量的内容(这些内容通过扩展您设置和运行 MBCS 数据库方面的技能以使您解决特定问题)来使您的生活能轻松一点。作为技术支持人员,我们始终对您的反馈感兴趣,并将积极地处理您向我们提供的任何问题、看法或更正。要获取更多关于 MBCS 的信息,请查看下面的在线参考资料

参考资料

到页首


关于作者

David KlineGabor Wieser 担任 PartnerWorld for Developers 的 DB2 技术支持代表。David 和 Gabor 与其它 10 个团队成员一起,帮助独立软件供应商(ISV)解决广泛的开发和管理问题。

David 拥有 DB2 应用程序开发和管理这两张证书。大多数时间,他侧重于帮助 ISV 解决与 DBA(数据库管理)相关的问题。可通过 djkline@us.ibm.com 与他联系。

Gabor 有 10 年以上的 DB2 工作经验,并从事多种 DB2 问题的研究,包括用 C 和 Java™ 程序进行开发、客户机和主机数据库之间的连通性以及大量数据库管理方面的问题。可通过 gaborw@us.ibm.com 与他联系。

0 0

相关博文

我的热门文章

img
取 消
img