在 Linux 上使用 Informix 出现乱码,通常不是数据库本身坏了,而是字符集(locale / codeset)不一致导致的。下面按最常见原因 → 排查方法 → 解决办法来说明。
Informix 乱码,核心只有一个:
写进去的编码 ≠ 读出来的编码
常见组合:
en_US.819(ISO-8859-1)zh_CN.UTF-8Informix 依赖以下环境变量:
LANG
LC_ALL
DB_LOCALE
CLIENT_LOCALE
如果没设或设错,就会按默认编码解释数据。
例如:
en_US.8859-1en_US.819这些 不支持中文,存中文必乱。
比如:
看到的就是“假乱码”。
dbaccess - -
SELECT dbs_collate FROM sysmaster:sysdbslocale;
或:
onstat -d
常见中文支持字符集:
zh_CN.utf8zh_CN.gb18030en_US.utf8env | grep -E "LANG|LC_|DB_LOCALE|CLIENT_LOCALE"
echo $LANG
export LANG=zh_CN.UTF-8
export DB_LOCALE=zh_CN.utf8
export CLIENT_LOCALE=zh_CN.utf8
export LANG=zh_CN.UTF-8
export DB_LOCALE=zh_CN.gb18030
export CLIENT_LOCALE=zh_CN.gb18030
export LANG=zh_CN.GB18030
⚠️ 一般不能自动恢复
如果:
→ 编码已错位,数据本身已损坏
✅ 只能:
✅ 全链路统一为 UTF-8
✅ 建库时明确指定 locale
✅ 所有客户端统一设置 CLIENT_LOCALE
✅ 不依赖默认编码
你可以贴出:
SELECT dbs_collate FROM sysmaster:sysdbslocale;env | grep -E "LANG|LC_|DB_LOCALE|CLIENT_LOCALE"我可以直接告诉你是哪一层编码错了,该怎么改。