GBase 8c数据库之mysql迁移适配常见误区 一、基础配置1. 驱动配置在外部连接GBase 8c数据库时需要配置驱动驱动类路径cn.gbase.DriverJDBC连接地址jdbc:gbase://${ip}:${port}/${dbName}若使用本地Maven引用可将驱动拷贝至工程lib目录下并在pom.xml中添加如下依赖xml dependency groupIdcn.gbase/groupId artifactIdgbase-jdbc/artifactId version5.0.0B03/version scopesystem/scope systemPath${project.basedir}/lib/gbase-jdbc-5.0.0B03.jar/systemPath /dependency2. JDBC 参数推荐参数名建议值说明stringtypeunspecified避免参数类型推断失败blobModeoff将 Blob 类型映射为 bytea 类型batchModetrue支持批量插入操作resultColumnHandleuppercase返回大写字段名需专用JDBC包二、SQL 语法兼容性问题1. 保留关键字问题问题表名或字段名为数据库保留关键字导致SQL执行报错。解决方案按优先级排序1.优先修改表名或字段名规避保留关键字2.使用双引号转义关键字字段/表名3.配置8c数据库参数豁免保留关键字校验。参数配置命令su - gbase gs_guc reload -N all -I all -Z datanode -c “exclude_reserved_wordsignore,now”注意部分关键字如to、user仍可能触发语法错误配置后建议提前测试各类SQL语句兼容性。2. 引号混用问题问题SQL语句中同时混用单引号、双引号触发语法解析异常。错误示例select * from test where id1 and age2;解决方案统一使用单引号包裹字符串值。正确示例select * from test where id1 and age2;3. GROUP BY 字段不在 SELECT 列表中报错问题MySQL支持GROUP BY字段不在SELECT查询列表中GBase默认开启严格模式直接报错。解决方案修改数据库sql_mode移除sql_mode_full_group严格校验规则。alter database 数据库名 set dolphin.sql_modesql_mode_strict,pipes_as_concat,ansi_quotes,no_zero_date,pad_char_to_full_length,auto_recompile_function,error_for_division_by_zero;4. UNION 排序问题解决方案开启子查询UNION排序支持参数。set enable_union_all_subquery_orderbyon;三、数据类型与编码问题字段编码不一致排查与修改1.查询表字段编码详情SELECT table_name, column_name, data_type, character_set_name, collation_name, is_nullable FROM information_schema.columns WHERE table_name IN (表1, 表2, 表3, 表4);2.修改字段编码格式ALTER TABLE reward_declare_task_histc ALTER COLUMN 字段名 TYPE VARCHAR(128) COLLATE C;四、大小写与返回格式问题1. 查询字段统一返回大写JDBC 参数配置resultColumnHandleuppercase备注必须配套专用 GBase JDBC 驱动包2. 表名大小写敏感控制数据库级参数配置修改后重新连接库生效alter database 数据库名 set dolphin.lower_case_table_names to 0;3. 数据内容查询不区分大小写表级排序规则设置为 utf8_general_ci五、性能优化1. JOIN 中 OR 条件拖慢查询优化方案用UNION ALL拆分替换 OR 多条件关联2. 批量插入报错 / 失效JDBC 开启批量模式batchModetrue六、加密函数兼容替换AES_ENCRYPT / AES_DECRYPT 替换GBase 内置 AES128 加密解密函数加密gs_encrypt_aes128(数据, 密钥)解密gs_decrypt_aes128(数据, 密钥)密钥规范长度 8~16 字节必须包含大写、小写、数字、特殊符号中至少 3 类使用示例gs_encrypt_aes128(数据, IvorypmTool)迁移注意MySQL 原有密文需先用 AES_DECRYPT 解密明文再用 gs_encrypt_aes128 重新加密入库七、错误日志与调试排错现象数据库客户端执行 SQL 无报错程序代码调用报错调高服务端日志提示级别运行gs_guc set -N all -I all -c client_min_messagesnotice gs_guc set -N all -I all -c “log_min_messageswarning”排查方式先在 GBase 服务端手动执行 SQL查看 Notice、Warning 详细告警信息八、层级递归查询兼容MySQL 依赖 会话变量实现树形层级查询GBase 统一使用标准 SQL 递归 CTE 语法WITH RECURSIVE …九、多表联查 GROUP BY 规范问题多表 JOIN 后 GROUP BY 只写字段名、不指定表别名语法校验失败规范写法分组字段必须携带表别名示例SELECT a.id, b.name FROM table_a a JOIN table_b b ON a.id b.id GROUP BY a.id;评论