在 Linux 上的 IBM Informix 中,字符集(数据库语言环境)主要通过 环境变量 和 数据库创建参数 来设置。下面是常见、规范的配置方式。
Informix 中“字符集”主要由以下两个环境变量决定:
| 环境变量 | 作用 |
|---|---|
DB_LOCALE |
数据库使用的语言/字符集 |
CLIENT_LOCALE |
客户端使用的语言/字符集 |
常见字符集示例:
| 字符集 | DB_LOCALE / CLIENT_LOCALE |
|---|---|
| UTF-8 | en_US.utf8 |
| GBK | zh_CN.gb |
| GB18030 | zh_CN.gb18030 |
| ISO-8859-1 | en_US.8859-1 |
在 Linux 用户环境 中(如 informix 用户):
export DB_LOCALE=en_US.utf8
export CLIENT_LOCALE=en_US.utf8
✅ 建议写入配置文件,避免每次手动设置:
vi ~/.bash_profile
或
vi ~/.bashrc
添加:
export DB_LOCALE=en_US.utf8
export CLIENT_LOCALE=en_US.utf8
然后生效:
source ~/.bash_profile
即使环境变量已设置,创建数据库时也必须显式指定 locale,否则可能使用默认字符集。
CREATE DATABASE testdb
WITH LOG
IN datadbs01
LOCALE en_US.utf8;
✅ 推荐写法(最安全):
CREATE DATABASE testdb LOCALE "en_US.utf8";
SELECT dbs_name, dbs_collate
FROM sysmaster:sysdatabases;
或:
SELECT DBINFO('db_locale') FROM systables WHERE tabid = 1;
echo $DB_LOCALE
echo $CLIENT_LOCALE
如果客户端和数据库字符集不一致,Informix 会尝试自动转换,但可能导致乱码。
客户端与数据库字符集保持一致
export DB_LOCALE=en_US.utf8
export CLIENT_LOCALE=en_US.utf8
export GL_USEGLU=1
export DB_LOCALE=en_US.utf8
export CLIENT_LOCALE=en_US.utf8
CREATE DATABASE cndb LOCALE "en_US.utf8";
export DB_LOCALE=zh_CN.gb
export CLIENT_LOCALE=zh_CN.gb
dbaccess、isql、JDBC)也必须匹配字符集locale -a | grep utf8
如果你愿意,可以告诉我:
我可以帮你给出最合适的一套字符集配置方案。