当我们使用 ODBC,JDBC 连接数据库时,我们需要在连接信息中正确设置语言环境变量:DB_LOCALE 和 CLIENT_LOCALE。
设置语言环境变量
DB_LOCALE=zh_cn.GB18030-2000
CLIENT_LOCALE=zh_cn.GB18030-2000
CSDK2.7 版本,IDS 默认情况下使用 Garbage In, Garbage Out 模式处理中文字符,若数据库服务器上的 DB_LOCALE 采用默认的 en_us.8859-1 字符集,能够正常支持中文字符。但是升级到 CSDK2.8 及以上版本时,不再支持 Garbage In, Garbage Out 模式,将出现乱码问题。该情况下,建议更改数据库的字符集(设置 DB_LOCALE=zh_cn.GB18030-2000,重新创建数据库),然后按本文中描述的方法进行 DB_LOCALE 与 CLIENT_LOCALE 的设置方法进行处理。若在实际环境下重建数据库成本太高,可以考虑如下步骤进行解决 ODBC 支持中文的问题。
数据库服务器端:
1. 设置环境变量: IFMX_UNDOC_B168163=1
2. 将 en_us.8859-1 字符集文件拷贝到 zh_cn 目录下
cd $INFORMIXDIR/gls/lc11
cp ./en_us/0333.lco ./zh_cn
3. 重新启动 IDS
客户端:
设置语言环境:
l DB_LOCALE=zh_cn.GB18030-2000
l CLIENT_LOCALE=zh_cn.GB18030-2000
不过本人测试INFORMIX7.3数据库中能设置DB_LOCALE=zh_cn.GB CLIENT_LOCALE=zh_cn.GB
对于 JDBC 我们可以通过 NEWCODESET 来解决该问题:
URLString = "jdbc:Informix-sqli://9.125.66.130:6346/dbname:InformixSERVER=servername;
NEWCODESET=GB18030-2000,8859-1,819;
CLIENT_LOCALE=en_US.8859-1;DB_LOCALE=en_US.8859-1;"