在AIX上安装的简体中文版DB2无法支持外部程序的中文数据导入,无论从telnet上的查询操作,还是外部访问程序的查询操作,都仅仅是乱码的输出。而通过在telnet上的insert语句添加的中文记录,能够在telnet上的查询操作中正常显示,而在外部程序的查询中无法正常显示。
以下的描述假定我们已经进入DB2命令环境下。
首先尝试的是数据库建立的时候指定codeset,利用如下命令:
create database dbtest using codeset GBK territory cn
在库建立完毕后,通过以下命令:
list database directory
可以发现我们测试用的中文数据库已经被成功建立。但当我们采用如下命令进行数据库的连接时候:
Connect to dbtest
出现了如下的错误信息提示:
SQL0332N There is no available conversion for the source code page "819" to the target code page "1386". Reason Code "1". SQLSTATE=57017
这说明我们访问用外部程序用的codepage设置与系统本身的codepage设置是不统一的。代码页是用来告诉数据使用什么字符集来显示字符,设置的问题主要是与英文外字符的显示相关。
中文依赖的代码页的值为1386,而在未经专门设定的时候,DB2的初始代码页的设置是默认跟随系统的代码页面设置的,关于原始的代码页面设置,我们可以通过无参数的数据库创建命令:
Create database dbtest1
来创建一个默认代码页的数据库,然后通过命令:
Get db cfg for dbtest1
来观察该数据库的代码页值。(windows下的模拟示范)

在DB2默认代码页的设置不支持中文字符集的情况下,我们就必须通过指令的设定来修改其代码页的值。利用如下命令(假定设置为中文字符集):
Db2set db2codepage=1386 – I instancename (指定某个实例)
或默认全部实例:
Db2set db2codepage=1386
然后执行如下命令就能够实现DB2代码页的转换了:
Db2 terminate
Db2start
这时候,我们再进行一个数据库的创建,并进行代码页的观察:
Create database dbtest2
Get db cfg for dbtest2
可以得到如下结果。(windows下的模拟示范)

在此条件下建立的数据库就支持中文了。
值得注意的是,代码页的设置仅仅影响的是设置以后创建的数据库的代码页问题,对于创建之前的数据库会,依然保持其原先的代码页面,所以有必要的话,某些库需要重新建立。
没有评论:
发表评论