达梦数据库-报错-15-列【XXX】长度超出定义

目录

一、环境信息

二、问题描述

三、问题截图

四、问题分析

1、可能原因分析

2、源端字段数据查看

3、DUMP字段

五、解决方法


一、环境信息

|------|--------------------------|
| 名称 | 值 |
| CPU | x86 |
| 操作系统 | KylinV10 |
| DM版本 | DM Database Server 64 V8 |

二、问题描述

测试环境DM8到DM9迁移,DTS工具迁移时提示:列【XXX】长度超出定义。

三、问题截图

四、问题分析

1、可能原因分析

|----|---------------------------------------------------------------------------|-------------------------------------|
| 序号 | 问题原因 | 解决方法 |
| 1 | 源端和目的端数据库字符集不一致,例如一个GBK、一个UTF-8,且数据中包含中文,GBK中一个中文占两个字节,UTF-8中一个中文占三到四个字节。 | DTS迁移时,选择配置类型映射关系,将VARCHAR类型长度适当扩倍。 |
| 2 | 两边表结构有差异,尤其关注报错字段类型长度差异。 | 对齐后,正常迁移。 |

但这次的情况是两边的字符集、表结构都相同,所以才有记录此次问题意义。

2、源端字段数据查看

报错字段INST_NAME类型定义长度64,LENGTHB计算字节长度为64,正好占满,倒数第一个字符是问好,第二个字符是6。

3、DUMP字段

dump不加第二参数,默认以十进制显示,字符6对应的十进制为54,可以查一下ASCII表。

ASCII 标准范围是 0--127;其中 0--31 和 127 是不可见控制字符,32--126 是可打印字符。超过 127 的字节值不属于标准 ASCII,所以198对应的字符显示为问号是正常的。

也就是说DTS在迁移一些特殊字符时,会做额外处理,例如加转义符之类的,导致超过类型最大长度定义。

五、解决方法

选择策略。

勾选按字节流迁移CHAR和VARCHAR数据,数据正常迁移无报错。

相关推荐
IT19955 小时前
Fail2Ban 防护 MySQL 实战|登录失败 3 次,IP 封禁 24 小时
数据库·mysql
夕除6 小时前
redis--IO 多路复用(select + poll)
数据库·sql
0+1116 小时前
Linux --从 poll 到 epoll多路转接
linux·服务器·1024程序员节
行思理6 小时前
go语言学习难度及适合学习的人群
开发语言·学习·golang
青瓦梦滋6 小时前
WebSocket协议
linux·服务器·网络·c++·websocket·网络协议·http
桌面运维家7 小时前
旧电脑跑不动课程软件,VDI云桌面怎样接着用?
运维·服务器·虚拟化·pve·vdi·云桌面
zhang133830890757 小时前
传统机械三杯式风速传感器易磨损冻堵?CG-88金属超声波风速风向传感器给出免运维方案
运维·服务器·网络·人工智能·自动化
知已难寻7 小时前
第 2 篇 · 云的地基:服务器、存储、网络三大基础设施
运维·服务器·网络·云原生·云计算·负载均衡·1024程序员节
2601_949847759 小时前
bcrypt.js 跨端三方库仓颉适配全流程
linux·运维·ubuntu
m0_639906949 小时前
Linux 操作系统入门:目录结构、服务排查常用命令、Shell 脚本基础
linux·运维·后端