Mysql迁移达梦问题汇总

技术总结 yangchenhui 13335℃ 0评论

国产化是一种趋势,尤其是面向政府的项目、产品等,所以记录达梦改造时遇到的问题。

函数不兼容

  1. group_concat 对应达梦 wm_concat 目前没有找到完全兼容函数
  2. ifnull(expr,true,false),mysql中ifnull函数可以有3个参数,达梦只有2个,mysql也有2个的,所以将业务改为2个就可以兼容两个数据库
  3. exists: mysql 中可以select exists(子查询),但是达梦中exists子查询只能用在where条件中
  4. date_add函数 ,mysql中3个参数,达梦只有2个,目前没有找到完全兼容函数
  5. date_diff 对应达梦中可以用timestamp_diff代替,mysql也可以用。

保留关键字

目前常用到的:order ,desc,describe,schema,function,condition,domain,synonym,rows,partition,xml,object,second,first,user

语法不兼容

  1. 如果字段类型是text类型,则在mybatis查询中无法直接使用“=”进行查询,会报dataType does not match,建议需要查询的字段改为varchar2.
  2. 达梦不能直接将text改为varchar2,只能类似编程中的交换一样,先新增一个字段,update过来,然后删掉原字段,再改名回原字段名。

jdbc连接字符串

jdbc:dm://" + host + ":" + port + "?schema=" + dbName

sql工具

  1. 目前使用达梦8自带数据库工具,macos下暂时还没找,只有windows版本。
  2. 如果需要将达梦数据库数据导出成insert语句,好迁移到mysql的话,可以用达梦自带迁移工具,创建任务-从达梦到sql即可,生成文件再做些改动即可。

小技巧

  1. 在达梦数据库工具中,默认查询跟oracle一样,会在用户名的模式下,访问其他模式的话,必须要加上schema.tableName,但是很多时候不太习惯这么做,只需要在执行sql语句前切换schema即可,如 set schema task;
  2. jdbc链接字符串中也会类似问题,但是低版本驱动中不支持schema参数,只有在比较新的驱动中可以再链接字符串中指定schema。

产品化建议:

如果项目是产品型项目,既要兼容mysql,又要兼容达梦,建议注意一下问题:

  1. 尽可能的不要用保留关键字,可以像flowable一样,关键字后面加,如order -> ORDER
  2. 尽可能不要用mysql专用语法,如update on duplicate key
  3. 使用exists,ifnull ,date_add等日期函数时要注意兼容性问题。
  4. 如果实在躲不过去,如group_concat, 则可以用mybatis中的databaseIdProvider来定制sql,具体咨询百度。

本文固定链接:杨晨辉的个人博客 » Mysql迁移达梦问题汇总
本站内容除特别标注外均为原创,欢迎转载,但请保留出处!

喜欢 (3)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址