在 CentOS 上解决 Informix 乱码问题,核心原因是 客户端字符集、数据库字符集、系统 locale 不一致。下面按“排查 → 解决”的思路说明。
dbaccess 或 isql 直连数据库看是否乱码dbaccess dbname -
SELECT dbs_collate FROM sysmaster:sysdbslocale
WHERE dbs_name = 'dbname';
常见值:
en_US.819 → ISO-8859-1zh_CN.gb → GB2312zh_CN.utf8 → UTF-8en_US.utf8locale
echo $LANG
推荐:
LANG=zh_CN.UTF-8
env | grep INFORMIX
重点看:
INFORMIXDIRCLIENT_LOCALEDB_LOCALEINFORMIXSQLHOSTS现象
?? 或乱方块解决 设置客户端字符集:
export CLIENT_LOCALE=zh_CN.gb
export DB_LOCALE=zh_CN.gb
或者(GBK):
export CLIENT_LOCALE=zh_CN.gbk
export DB_LOCALE=zh_CN.gbk
⚠️ 必须与数据库一致
export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
并确保:
export CLIENT_LOCALE=zh_CN.utf8
export DB_LOCALE=zh_CN.utf8
export CLIENT_LOCALE=zh_CN.gb
export DB_LOCALE=zh_CN.gb
JDBC URL:
jdbc:informix-sqli://host:port/dbname:INFORMIXSERVER=xxx;NEWCODESET=GBK,GB2312,819
写入用户或全局环境变量:
vi ~/.bashrc
添加:
export INFORMIXDIR=/opt/informix
export PATH=$INFORMIXDIR/bin:$PATH
export CLIENT_LOCALE=zh_CN.gb
export DB_LOCALE=zh_CN.gb
export LANG=zh_CN.UTF-8
source ~/.bashrc
你可以贴出:
locale 输出我可以直接给你一套可复制的配置。