INFORMIX数据库PHP ODBC连接无法插入中文、查询中文的解决方案!!搞了三天啊!!

时间:2021-04-17 07:58:21

当我们使用 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;"