问题描述
使用达梦DTS迁移工具,进行MySQL迁移到达梦时,部分表char类型列数据迁移报错:
列[NAME]长度超出定义。
环境说明
数据库版本:
MySQL:8.0.**
DM:8.1.3.**
达梦相关参数:
COMPATIBLE_MODE = 0
LENGTH_IN_CHAR = 1
CHARSET = 1 (UTF-8)
问题重现
将源库MySQL下的cjc库迁移到达梦数据库CJC用户下。
源库:MySQL创建测试数据
mysql> use cjc;
Database changed
mysql> create table t1(id int,name char(4));
Query OK, 0 rows affected (0.02 sec)
mysql> create table t2(id int,name varchar(4));
Query OK, 0 rows affected (0.01 sec)
mysql> insert into t1 values(1,'国产数据');
Query OK, 1 row affected (0.00 sec)
mysql> insert into t2 values(1,'达梦数据');
Query OK, 1 row affected (0.01 sec)
开始迁移









问题重现




char(4) 类型数据迁移失败,varchar(4)类型数据迁移成功。
SQL> select * from t1;
未选定行
已用时间: 0.876(毫秒). 执行号:1101.
SQL> select * from t2;
行号 ID NAME
---------- ----------- ------------
1 1 达梦数据
已用时间: 1.085(毫秒). 执行号:1102.
问题分析
列长度超出定义问题,第一个想到的参数是LENGTH_IN_CHAR,但是参数值已经是1了。
尝试修改 COMPATIBLE_MODE 参数,从0改成4,问题依旧。
COMPATIBLE_MODE 参数说明:
Server compatible mode:
0:none, 1:SQL92, 2:Oracle, 3:MS SQL Server, 4:MySQL, 5:DM6, 6:Teradata, 7:PG
问题可以稳定重现:
达梦数据库:
varchar(4)可以存储四个中文。
SQL> create table t2 (name varchar(4));
操作已执行
已用时间: 5.872(毫秒). 执行号:61711.
SQL> insert into t2 values('达梦数据');
影响行数 1
已用时间: 0.682(毫秒). 执行号:61712.
SQL> commit;
char(4)无法存储四个中文(MySQL可以)。
SQL> create table t2(name char(4));
操作已执行
已用时间: 5.680(毫秒). 执行号:61708.
SQL> insert into t1 values('达梦数据');
insert into t1 values('达梦数据');
[-6169]:列[name]长度超出定义.
已用时间: 0.666(毫秒). 执行号:0.
初步猜想还是和LENGTH_IN_CHAR参数有关,VARCHAR类型可以受益于LENGTH_IN_CHAR参数的“放大效应”,LENGTH_IN_CHAR = 1 (以字符为单位),因为VARCHAR(4)能存入4个汉字,说明其长度是按字符数计算的。CHAR是定长类型,其长度语义不受LENGTH_IN_CHAR参数的“放大效应”影响,严格按照字节数来定义长度。
但是还是不清楚,为什么 CHAR 不受 LENGTH_IN_CHAR = 1 参数控制?
解决方案
DTS迁移过程中,将CHAR类型转换为VARCHAR类型,或者适当扩大列长度。
重新迁移这张表
上一步



选择:如果目标表已存在,先删除
但实际测试,即使勾选了这个选项,目标表还是不会自动删除,需要人为先手动在目标库执行删除。

转换

将char(4)改成varchar,默认长度50。



迁移成功。

验证:
SQL> select * from t1;
行号 ID NAME
---------- ----------- ------------
1 1 国产数据
已用时间: 0.766(毫秒). 执行号:1106.
SQL> desc t1;
行号 name type$ nullable
---------- ---- ----------- --------
1 ID INTEGER Y
2 NAME VARCHAR(50) Y
已用时间: 1.034(毫秒). 执行号:1107.
欢迎关注我的公众号《IT小Chen》
最后修改时间:2026-04-20 10:03:30
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




