一、安装部署操作步骤
1. 安装 GBase 8s 服务端
| 项目 | 示例值 |
|---|---|
| 服务端目录 | /opt/gbase8s |
| 数据库用户 | gbasedbt |
| 实例名 | gbase01 |
| 监听端口 | 9088 |
| 环境文件 | /home/gbasedbt/profile.gbase01 |
| 配置文件 | /opt/gbase8s/etc/onconfig.gbase01 |
| SQLHOSTS | /opt/gbase8s/etc/sqlhosts.gbase01 |
onstat -
netstat -tulnp | grep 9088
2. 安装 ClientSDK 与 unixODBC
安装 GBase ClientSDK 后,配置动态库路径、SQLHOSTS、ODBC Driver。当前项目使用的驱动名为:
GBase ODBC DRIVER (64-bit)
需要维护的关键配置文件:
/etc/odbcinst.ini
/etc/odbc.ini
/opt/gbasecsdk/etc/sqlhosts
3. 配置 PHP PDO_ODBC
cd /www/server/php/73/src/ext/pdo_odbc
/www/server/php/73/bin/phpize
./configure --with-php-config=/www/server/php/73/bin/php-config --with-pdo-odbc=unixODBC,/usr
make -j1
make install
php -m | grep PDO_ODBC
4. 分层验证
- 使用
dbaccess验证 GBase 本机建库、建表、插入、查询。 - 使用
isql验证 unixODBC 到 GBase 的连接。 - 使用独立 PHP 脚本验证
PDO_ODBC查询、写入、回读。 - 使用 ThinkPHP
Db::connect验证项目连接器。 - 使用业务接口验证项目真实 SQL。
Db::connect、Db::query、Db::execute、QueryBuilder find 和 count 均可用。
二、智慧餐厅项目连接步骤
1. 新增项目文件
| 文件 | 作用 |
|---|---|
thinkphp/library/think/db/connector/Gbase8s.php | ThinkPHP GBase 8s 数据库连接器 |
thinkphp/library/think/db/builder/Gbase8s.php | ThinkPHP GBase 8s SQL Builder |
application/config/gbase8s.database.example.php | GBase 8s 数据库配置示例 |
2. 复制配置示例
cp application/config/gbase8s.database.example.php application/config/local/gbase8s.database.php
3. 修改连接参数
return [
'type' => 'gbase8s',
'hostname' => '127.0.0.1',
'hostport' => '9088',
'database' => 'zhct',
'username' => 'gbasedbt',
'password' => 'password',
'prefix' => 'ydy_',
'server' => 'gbase01',
'odbc_driver' => 'GBase ODBC DRIVER (64-bit)',
'gbasecsdk_dir' => '/opt/gbasecsdk',
'gbase_sqlhosts'=> '/opt/gbasecsdk/etc/sqlhosts',
'db_locale' => 'zh_CN.utf8',
'client_locale' => 'zh_CN.utf8',
];
4. 连接链路
ThinkPHP Db::connect
-> think\db\connector\Gbase8s
-> PDO_ODBC
-> unixODBC
-> GBase ODBC Driver
-> GBase 8s
三、本次项目适配总结
技术路线
采用已验证的
PDO_ODBC 路线,保留 PDO_GBASEDBT 作为厂商后续确认的备选。
连接器能力
支持 DSN 拼接、环境变量设置、字段读取、表读取、基础查询、写入和最近插入 ID。
Builder 适配
避免 MySQL 反引号字段引用,并适配批量插入 SQL。
业务 SQL
已处理部分
GROUP_CONCAT、宽松 GROUP BY、排序和字段查询兼容问题。
已处理的典型 SQL 差异
MySQL:
GROUP_CONCAT(meal.id ORDER BY meal.id ASC)
GBase 8s:
LISTAGG(meal.id, ',') WITHIN GROUP (ORDER BY meal.id ASC)
已验证接口范围
staff_tree
staff_sport
department_all
station_show
identity_lists
card_list
card_log_list
card_issue_staff
subsidy_list
四、后续建议
- 正式信创环境到位后,复跑 GBase 服务、ODBC、PHP、ThinkPHP、业务接口五层验证。
- 继续扫描
DATE_FORMAT、GROUP_CONCAT、FIND_IN_SET、LIMIT、反引号、宽松GROUP BY等 MySQL 方言。 - 重点回归 9 类异步导出相关页面:消费订单、人员消费明细、部门消费明细、设备消费明细、充值统计、补贴统计、菜品销量统计、餐厅经营汇总表、档口营收结算表。
- 用 MySQL 与 GBase 双环境对比接口返回、统计口径、分页、排序和导出结果。