目录
- 背景
- 现象
- 问题原因
- 原因1:字符集不同
- 原因2:以字节为单位
- 解决办法
- 方法1:扩大长度
- 结果验证
- MYSQL
- DTS
- DM
背景
迁移过程环境信息如下:
数据库 | 版本 | 字符集 | 补充 |
---|---|---|---|
MYSQL | 8.0.xx | UTF8mb4 | |
DM | 8.1.3.162 | UTF8(UTF8mb3的简称) | 以字节为单位 |
现象
用户在使用DMDTS工具把数据从MYSQL数据库
迁移到DM数据库
时,使用DTS默认参数,在迁移数据的过程中varchar
类型的字段会报错:列[xxx]长度超出定义
问题原因
原因1:字符集不同
-
DM 数据库
目前不支持 UTF8mb4字符集。 -
由于
UTF8mb4
和UTF8(UTF8mb3的简称)
存在 区别: UTF8mb4一个超长字符最大使用4
字节数来存储,UTF8mb3一个超长字符最大使用3
字节数来存储。 -
假设在
MYSQL
中varchar
类型的字段最大长度是n
,那么在DM
中varchar
类型的字段最大长度就应该是n*4/3
,这样才能存的下。
原因2:以字节为单位
-
MySQL
中 varchar(1) 可以存一个汉字,而DM
是以字节为单位。UTF-8 字符集,varchar(3) 才可以存一个汉字。
-
假设在
MYSQL
中varchar
类型的字段最大长度是m
,那么在DM
中varchar
类型的字段最大长度就应该是m*3
。
解决办法
方法1:扩大长度
综合原因1和原因2,MYSQL
中varchar
类型的字段最大长度是k
,那么在DM
中varchar
类型的字段最大长度就应该是k*4
,这样才能存的下。
结果验证
MYSQL
表结构
表数据
DTS
k-->k*4
,然后迁移