在 Linux 上使用 IBM Informix 出现乱码,通常是客户端字符集、服务端字符集、终端环境、或应用编码不一致导致的。下面按「原因 → 排查 → 解决」说明。
zh_CN.gb18030 / UTF-8en_US.8859-1 或错误 localeInformix 依赖以下变量:
DB_LOCALE
CLIENT_LOCALE
LANG
LC_ALL
dbaccess dbname -
SELECT dbs_collate FROM sysmaster:sysdbslocale
WHERE dbs_dbsname = 'dbname';
常见结果:
zh_CN.gb18030en_US.819zh_CN.utf8locale
echo $LANG
dbaccess dbname -
SELECT '中文测试';
DB_LOCALE=zh_CN.utf8
export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
export DB_LOCALE=zh_CN.utf8
export CLIENT_LOCALE=zh_CN.utf8
注意:Informix 中
UTF-8写作utf8
export LANG=zh_CN.gb18030
export DB_LOCALE=zh_CN.gb18030
export CLIENT_LOCALE=zh_CN.gb18030
并确保:
| 工具 | 设置位置 |
|---|---|
| Xshell | 属性 → 终端 → 编码 |
| SecureCRT | Session → Terminal → Appearance |
| Linux | locale 必须支持 |
jdbc:informix-sqli://host:port/dbname:INFORMIXSERVER=xxx;DB_LOCALE=zh_CN.utf8;CLIENT_LOCALE=zh_CN.utf8;
Java 端:
String s = new String(rs.getBytes(1), "UTF-8");
❌ 只设 LANG
❌ 服务端 GBK,客户端 UTF-8
❌ 终端 UTF-8,但 DB_LOCALE=en_US.819
服务端 + 客户端 + 终端 + 应用 = 同一字符集
✅ 新系统:全 UTF-8
✅ 老系统:全 GB18030
如果你愿意,可以告诉我:
我可以直接给你一份可复制的配置。