踩坑1:存储汉字出现长度不够问题
在 MySQL
中使用 varchar(1)
可以存储1个汉字,在原样迁移到达梦数据库后会出现插入、修改失败问题,因为达梦数据库需要 varchar(3)
才能存储1个汉字。
可以使用达梦数据库迁移工具的数据类型映射功能来解决:
在迁移时不勾选”使用默认数据类型映射关系”
踩坑2:数据库 timestamp
或 datetime
表结构迁移失败,提示类似 DEFAULT
约束问题
在使用达梦数据库迁移工具时可能会出现这个问题;
极有可能是在 MySQL
中对 timestamp
和 datetime
类型字段设置了 CURRENT_TIMESTAMP(6)
默认时间,以及设置数据更新时自动更新时间,此时在迁移的配置中,手动更新字段映射配置,在默认的映射配置中,默认值被加上了单引号('CURRENT_TIMESTAMP(6)'
),我们需要把单引号去掉就行。
踩坑3:数据迁移失败,提示类型信息问题
在使用达梦数据库迁移工具时可能会出现这个问题;
在迁移工具中“浏览”数据时会发现,日期信息会显示成 2020-01-01T00:00:00
这种格式,这种格式导致达梦数据库无法解析,因此迁移失败。
问题是 MySQL
的字段被设置成 datetime
类型,因此会显示成上面这种格式,把 MySQL
的字段类型改为 timestamp
后在用迁移工具迁移数据就不会出现问题。
踩坑4:在 MySQL
中使用 blob
或使用 clob
存储长文本,迁移达梦数据库后导致数据异常
主要表现为,用的 Hibernate 一个工作流的信息需要保持长文本数据,同一套Java代码,在 MySQL 下正常,但是在 达梦数据库 上出现数据异常。
经过排查:
- MySQL blob -> DM blob :Java读取达梦数据库数据后返回16进制数据(实际应该返回文本)
- MySQL blob -> DM clob :Java读取达梦数据库数据后返回文本数据(这是正确的类型,但是依旧存在中文乱码)
- MySQL 中 blob 里面的数据存在中文乱码,因此迁移到达梦数据库后依旧出现中文乱码
- MySQL text -> DM clob :在MySQL中解决了中文乱码,到达梦数据库中中文乱码同样也不存在,因此这个也是正常的
因此迁移时需要注意,如果在 MySQL 中使用 blob 存储长文本(有汉字)需要在MySQL中特殊处理,至少要把汉字乱码问题解决掉。
然后迁移到达梦数据库中时,达梦字段类型使用 clob 或者 text 来存储(使用 blob 存储时读取出来的数据会是16进制)
解决过程:MySQL blob -> MySQL text(解决中文乱码) -> DM clob 或者 DM text