插入报字段超长,但是不知道是那个字段

【TiDB 使用环境】生产环境
【TiDB 版本】V8.1.0
【操作系统】Rocky Linux
【部署方式】机器部署
【集群数据量】
【集群节点数】
【问题复现路径】
【遇到的问题:问题现象及影响】
执行如下语句报字段超长,但是没提示具体是那个字段

insert into dwd_dev_test_data_range_pass(sh_name, age, id_zkuytv, md5_urfbck, mapped_ulenqx, log_id_irkxom)
select sh_name, age, id_zkuytv, md5_urfbck, mapped_ulenqx, log_id_irkxom from dwd_dev_test_data_range;

是否支持通过配置可以让这种写法提示什么字段超长

image

看下表结构啊,上面些了 field len = 2

image
我这边提示没问题。去命令行试试呢,字段又不多,看都看的过来

比较下两个表结构是不是可以看出来

字段长度为2,数据长度为13;这个很显现了,看写的表结构那些满足,再看查询的语句,哪些字段长度会超

这个确实没什么好办法,只能先把长度为2的字段都找出来,然后再按字段去找insert的数据。

手动 lenth一下每一个字段长度看看

建个临时表插入临时表,然后char_length函数看

看下看下表结构

对比下表结构,然后找下 字段长度为2,数据长度为13的那个 就是他了

1 个赞

生产环境中,字段有大几十个,遇到这种问题比较麻烦

insert into是可以提示字段名的,但是我这种写法就不提示字段名

表的字段有大几十个,肉眼看,有点麻烦

查询下表每个列的Max(length),然后再比较待插入表的列长度,貌似只能这样了。。。

提示已经说了表结构了,对着找一找就可以了

把表结构粘到excel表格中,看varchar(2)或char(2)的字段,不是所有的字段都要看。
sh_name, age, id_zkuytv, md5_urfbck, mapped_ulenqx, log_id_irkxom ,就这六个字段啊?

看看你哪个字段设置的长度为2

大几十个字段,这个只是我写的测试。

两个表之间通过查询插入数据,最好是源表和目的表的字段类型一致,字段字段源表和目的表一致或源表小于等于目的表

看下表结构,提示里有 field len 2 ,这个基本就能看到是那个字段