关于sql语句_关于SQLSTATE 57017的解决

更新时间:2015-04-14    来源:DB2教程    手机版     字体:

【www.bbyears.com--DB2教程】

在项目中需要编写DB2客户端程序,服务器和客户端均为AIX。使用db2 catalog命令添加node和db之后,连接数据库

db2 connect to XXX user XXX

SQL0332N There is no available conversion for the source code page "1386" to
the target code page "819". Reason Code "1". SQLSTATE=57017

从提示来看,是说服务器的codepage为1386,客户端codepage为819,无法完成转换。于是上google,得到的解决方法是:

db2set db2codepage=819(也有说改成1386的,比较乱)
db2 terminate 

由于此客户端上还运行其它DB2实例,不敢贸然更改codepage,所以研究了一下到底应该怎么改。

由IBM的官方说法(http://publib.boulder.ibm.com/infocenter/db2v7luw/index.jsp?topic=/com.ibm.db2v7.doc/db2d0/db2d0336.htm):
第一种codepage是application code page,在连接建立时确定。如果设定了db2codepage,则使用此代码;否则,根据操作系统、环境变量等要素自动估计出一个。IBM建议使用后一种方法。
第二种codepage是database code page,是在建立数据库时决定的。

那么,不设定db2codepage时,application code page是怎么估计出来的呢?
在UNIX下,是根据locale设置确定的。
在Windows下,根据win.ini文件的[intl]段的iCountry确定。
在32位Windows下,根据注册表确定。

查看上面的链接,可以看到详细的说明。以及具体的映射方法。

现在,开始解决问题,将用户的.profile文件进行修改,令LANG=zh_CN。重登录,令其生效,问题解决。

反观网上提供的解决方法,根据上面的原理,客户端应该设置db2codepage=1386。

本文来源:http://www.bbyears.com/shujuku/14359.html

猜你感兴趣