有 MySQL 语法直接转 DM 语法的工具吗
可以使用 DM 数据迁移工具 (DTS),进行 MySQL 到 DM 的迁移,MySQL 和 DM 数据库的语法兼容性不高。关于语法,对于表、视图或游标等对象的创建语法存在不同,需要基于 DM 数据库的语法进行改写;部分 MySQL 数据库自带的系统包、函数、存储过程在 DM 数据库中也不支持,同样需要手动改写或重建相同功能的对应对象。关于数据,MySQL 中的某些数据,在 DM 中可能会被判定为不合法,需要进行修改。
在迁移数据之前,需要修改 DM 数据库参数,修改兼容参数为兼容 MySQL 数据库 COMPATIBLE_MODE=4
,重启数据库服务使其生效即可。
- 选择迁移方式时,选择【MySQL–>DM】,如下图所示:
- 填写源端及目的端数据库信息(源端 MySQL,目的端 DM),保证数据库都能正常连接,如下图所示:
- 指定需要迁移的对象,MySQL 数据库到 DM 数据库的迁移,只能迁移表和视图,如下图所示:
- 选择迁移对象,可迁移的对象包括表和视图,如下图所示:
- 点击【完成】,即可完成迁移,可在完成迁移向导中看到迁移的详细信息,如下图所示:
至此,MySQL 到 DM 的数据迁移完成,但在迁移时只能迁移 MySQL 的表和视图,其他对象无法进行迁移,需要手动改写或者重新创建来完成数据对象的正常使用。
- MySQL 中时间类型
TIMESTAMP
默认 default 设置为0000-00-00 00:00:00
。 - DM 中
TIMESTAMP
类型数据不能为0000-00-0000:00:00
,在 DM 中是不合法的,必须在0001-01-01 00:00:00.000000
到9999-12-31 23:59:59.999999
之间,所以可通过直接修改 MySQL 中的业务表数据后进行数据迁移。
注意在迁移过程中可能会遇到一些语法不谦容的问题,如多表的联合查询语法、含有特殊函数的 SQL 语句等,需根据实际情况进行解决,MySQL 对于外键等对象的处理逻辑同 DM 存在诸多不同,需因地制宜。
迁移 MySQL 是否需要下载驱动
可利用 DM 数据库自带的数据迁移工具迁移 MySQL,工具如下所示:
快速设置使得在 mybatis 下对象不用添加双引号
- 设置大小写不敏感,此方法会影响查询结果集,因为其对结果集匹配也不区分大小写,需要根据业务自行评估是否可行。
- 在数据库中,批量改成对应的。
数据迁移出现乱码
可能的原因是原数据的字符集和现在的 DM 数据初始化的字符集不一致,例如:MySQL 用的是 UTF8MB4 字符集,迁移到 DM 数据库后中文乱码,DM 数据库目前不支持 UTF8MB4。
DTS 从 MySQL 迁移到 DM,char 长度是原来的 3 倍
【问题原因 1】:
老版本 DTS 工具为保证数据成功迁移,会为不同字符集的目标库中 char 字段自动扩大 3 倍。
新版本已经优化该问题,请升级更新 DM 数据库版本。
查看 DTS 版本,如下图所示:
MySQL 中表结构,如下图所示:
迁移过程,如下图所示:
迁移后 DM 数据库表结构,如下图所示:
【问题原因 2】:
MySQL 中 varchar(1) 可以存一个汉字,DM 数据库是以字节为单位。gb18030 字符集,varchar(2) 才可以存一个汉字;UTF-8 字符集,varchar(3) 才可以存一个汉字。
UNSUPPORTED MAJOR.MINOR VERSION 52.0
【问题描述】:
DTS 连接 MySQL 错误:COM/MYSQL/CJ/JDBC/DRIVER:UNSUPPORTED MAJOR.MINOR VERSION 52.0
。
【解决方法】:
JDK 版本不匹配,把启动 DTS 的 JDK 版本调整一下,调整参数位置:数据库安装路径下 Tool 目录 dts.ini../jdk/bin
MySQL 存储过程改为 DM
【问题描述】:
DM 数据库存储过程创建临时表,如下所示:
begin |
在 MySQL 中,可以使用 @
定义 session
级别变量,然后在动态 SQL 中对变量进行赋值。DM 数据库是否支持这种方式。
【解决方法】:
设置 MS_PARSE_PERMIT=1
,然后重启数据库生效后,可以通过 @ 定义 session 级别变量。
begin |
动态 SQL 中对变量进行赋值需要修改。
MySQL 的二进制数据怎么导入
可以用 DM 数据迁移工具 DTS,DTS 在数据库安装路径 Tool 目录下。