Ubuntu 上 GBase 8s 实例重启与字符集踩坑实录
关键词:GBase 8s、Ubuntu、locale、JDBC、oninit、9091 端口
背景
最近在 Ubuntu 22.04 服务器上部署 GBase 8s(Informix 兼容版),准备给图像分析业务新建数据库 student
。整个流程看似简单,却在“Database locale information mismatch”这个错误上折腾了一下午。本文把踩坑与填坑过程完整记录下来,供后来者少走弯路。
1. 环境信息
- OS:Ubuntu 22.04 LTS
- GBase 版本:GBase 8s V12.10(试用许可,2026-07-16 到期)
- 实例名:
gbaseserver
- 监听:
192.168.8.127:9091
- 数据目录:
/var/opt/gbaseserver_dbs
2. 问题现象
2.1 创建数据库时报错
echo "create database student with log;" | dbaccess - -
输出:
SQLException: Database locale information mismatch
2.2 JDBC 同样报错
jdbc:gbasedbt-sqli://192.168.8.127:9091/image_analysis_db:GBASEDBTSERVER=gbaseserver
异常:java.sql.SQLException: Database locale information mismatch
3. 排障过程
3.1 确认系统 locale
locale
LANG=zh_CN.utf8
LC_ALL=zh_CN.utf8
→ 系统已统一为 UTF-8,不是系统 locale 问题。
3.2 查看数据库字符集
echo "select name from sysmaster:sysdatabases;" | dbaccess sysmaster -
发现已有系统库,证实实例运行正常。
3.3 发现 JDBC 不会继承 Shell locale
GBase/Informix JDBC 驱动 必须显式指定字符集,否则默认使用 en_US.8859-1
,与数据库 zh_CN.utf8
冲突,于是报错。
4. 解决方案
4.1 创建数据库前统一 locale(一次性)
export LANG=zh_CN.utf8
export LC_ALL=zh_CN.utf8
echo "create database image_analysis_db with log;" | dbaccess - -
验证:
echo "select name from sysmaster:sysdatabases where name='image_analysis_db';" | dbaccess sysmaster -
得到 student
,创建成功。
4.2 JDBC URL 追加字符集参数
jdbc:gbasedbt-sqli://192.168.8.127:9091/image_analysis_db:GBASEDBTSERVER=gbaseserver;DB_LOCALE=zh_CN.utf8;CLIENT_LOCALE=zh_CN.utf8
Java 示例:
String url = "jdbc:gbasedbt-sqli://192.168.8.127:9091/image_analysis_db:GBASEDBTSERVER=gbaseserver;DB_LOCALE=zh_CN.utf8;CLIENT_LOCALE=zh_CN.utf8";
Properties p = new Properties();
p.setProperty("user", "gbasedbt");
p.setProperty("password", "your_pwd");
Connection conn = DriverManager.getConnection(url, p);
再次连接,不再报错。
5. 重启实例的正确姿势
服务器重启后,需要手动拉起实例。
# 切到实例用户
sudo su - gbasedbt# 启动
oninit -vy# 确认状态
onstat -
看到 On-Line
即为成功。
6. 一键脚本(可选)
把启动命令写成 systemd 服务,或简单脚本 /usr/local/bin/start-gbase.sh
:
#!/bin/bash
export LANG=zh_CN.utf8
export LC_ALL=zh_CN.utf8
su - gbasedbt -c "oninit -vy"
赋权:
sudo chmod +x /usr/local/bin/start-gbase.sh
7. 经验总结
踩坑点 | 正确姿势 |
---|---|
系统 locale ≠ 数据库 locale | export LANG=zh_CN.utf8 && export LC_ALL=zh_CN.utf8 |
JDBC 不读取 Shell 变量 | 在 URL 里显式加 DB_LOCALE 和 CLIENT_LOCALE |
重启后忘记启动 | oninit -vy + onstat - |
8. 参考链接
- GBase 8s 官方文档:字符集与国际化 https://www.gbase.cn
- Informix JDBC Driver 参数说明 IBM Knowledge Center
如果你也在 Ubuntu 或 CentOS 上折腾 GBase,希望这篇小记能帮你三分钟定位、五分钟解决。Happy coding!