Mysql迁移达梦

934 阅读2分钟

Mysql迁移达梦

Docker安装达梦8

用于测试开发

docker run -d -p 5236:5236 --restart=always --name dm8 --privileged=true \
 -e PAGE_SIZE=32 \
 -e LD_LIBRARY_PATH=/opt/dmdbms/bin \
 -e INSTANCE_NAME=dm8 \
 -e LENGTH_IN_CHAR=1 \
 -e COMPATIBLE_MODE=4 \
 -e CASE_SENSITIVE=0 \
 -v $PWD/data:/opt/dmdbms/data \
 dm8_single:v8.1.2.128_ent_x86_64_ctm_pack4

初始化参数配置

重点:

开启兼容模式 COMPATIBLE_MODE

0:不兼容,1:兼容 SQL92 标准,2:部分兼容 ORACLE,3:部分兼容 MS SQL SERVER,4:部分兼容 MYSQL, 5:兼容 DM6,6:部分兼容 TERADATA

ALTER SYSTEM SET 'COMPATIBLE_MODE'=4 SPFILE;

客户端JDBC指南

迁移相关问题

  1. 查询结果无法转换为 java 实体类定义的枚举类型字段

升级至最新的达梦驱动

  1. Mysql函数 GROUP_CONCAT 无法使用

参考使用WM_CONCAT函数

  1. 列[`]附近出现错误

DM无法识别[`]

对XML中的SQL里面的[`]符号进行删除替换

  1. 列[force]附近出现错误

DM无法识别[force],对XML中的SQL里面的[force]进行删除替换

  1. 递归

  2. JSON处理

  3. 试图在blob或者clob列上排序或比较

达梦数据库中是不允许对大字段(clob blob)类型的列进行排序操作的,部分新版本可以修改配置 ini 参数 ENABLE_BLOB_CMP_FLAG=1。

SP_SET_PARA_VALUE(1,'ENABLE_BLOB_CMP_FLAG',1)
  1. 无法解析的成员访问表达式[FIND_IN_SET]

  2. 无法解析的成员访问表达式[IF]

可参考同上,或者使用DECODE函数替代

  1. 列名为关键字

异常信息: 列[reference]附近出现错误: 语法分析出错
参考方案: eco.dameng.com/community/a…

  1. 对自定义列进行GROUP BY 出现无效列名问题

  2. [-4080]: 不是 group by 表达式

alter system set 'GROUP_OPT_FLAG'=1 both;

  1. dm无法连表删除

采用子查询方式进行删除

函数差异

MysqlDM8问题描述解决方案|
YEARWEEKWEEK无法识别[YEARWEEK]使用[WEEK]替换
DATEDIFFDATEDIFF语法错误细品文档
IFDECODE无法识别[IF]使用[DECODE]替换, 或者自定义函数
FIND_IN_SET无法识别[FIND_IN_SET]可自定函数

相关连接