在 Ubuntu 上使用 IBM Informix 出现中文乱码,通常不是“一个开关”能解决的,而是客户端、数据库、系统环境三者字符集不一致导致的。下面按最常见场景给你一套排查与解决办法。
| 现象 | 可能原因 |
|---|---|
终端里 dbaccess 中文乱码 |
Ubuntu 终端字符集不对 |
| 程序(Java/C/Python)读出来乱码 | 客户端字符集未设置 |
| 数据库里本来就是乱码 | 建库时字符集不对 |
| Windows 正常,Ubuntu 乱码 | 客户端 LOCALE 没设 |
locale
正常应看到:
LANG=zh_CN.UTF-8
LC_CTYPE=zh_CN.UTF-8
如果不是:
sudo locale-gen zh_CN.UTF-8
sudo update-locale LANG=zh_CN.UTF-8
然后 重新登录或重启。
在 ~/.bashrc 或 ~/.profile 里加:
export INFORMIXDIR=/opt/informix
export INFORMIXSERVER=your_server
export PATH=$INFORMIXDIR/bin:$PATH
# 关键两行
export DB_LOCALE=zh_CN.utf8
export CLIENT_LOCALE=zh_CN.utf8
✅ utf8 小写,Informix 对大小写敏感
使其生效:
source ~/.bashrc
dbaccess yourdb -
SELECT dbs_collate FROM sysmaster:sysdbslocale
WHERE dbs_dbsname = 'yourdb';
常见结果:
zh_CN.57357 → GB18030zh_CN.utf8 → UTF-8 ✅en_US.819 → 不支持中文 ❌无法“改”字符集,只能:
建库示例:
CREATE DATABASE mydb WITH BUFFERED LOG IN LOCALE zh_CN UTF8;
如果你只是用 dbaccess:
export DB_LOCALE=zh_CN.utf8
export CLIENT_LOCALE=zh_CN.utf8
export LANG=zh_CN.UTF-8
并且终端用 UTF-8:
export DB_LOCALE=zh_CN.utf8
export CLIENT_LOCALE=zh_CN.utf8
JDBC URL:
jdbc:informix-sqli://host:port/db:INFORMIXSERVER=xxx;DB_LOCALE=zh_CN.utf8;CLIENT_LOCALE=zh_CN.utf8
os.environ['DB_LOCALE'] = 'zh_CN.utf8'
os.environ['CLIENT_LOCALE'] = 'zh_CN.utf8'
locale 是 UTF-8DB_LOCALE / CLIENT_LOCALE 已设如果你愿意,可以告诉我:
我可以直接给你精确配置方案。