关于字段超长导致的插入错误的提示信息(value too long for type character varying)

Posted 石头StoneWang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于字段超长导致的插入错误的提示信息(value too long for type character varying)相关的知识,希望对你有一定的参考价值。

关于字段超长导致的插入错误的提示信息

背景

你们肯定遇到过这样的错误,跑的程序需要插入或更新一张表,值的长度超过字段最大限制而报错。要如何定位是哪个字段长度过小导致的?

方法

1、先要获取错误信息

最直观的是在web页面上爆出这个错误信息(如果有的话),或者日志上找错误信息。有了错误信息之后怎么定位?

在这里插入图片描述

2、如何排查?
  • 对于mysql,错误提示信息有指示是究竟是哪个字段过短。
  • 但是对于pgsql,提示得模糊。

pgsql没有提示出问题的字段名,只能通过 “类型+长度” 来猜是哪个字段过短。

比如pgsql的错误:

value too long for type character varying(20)

出问题的字段首先是character,即字符类型的,varying表示变长的,20表示表中该字段目前的长度,所以综合起来是varchar(20)。有时候光靠这些信息定位不出来,比如同表有两个或多个varchar(20)的字段时,就得查看入表的值才能进一步确定,确实是非常坑的。

实践

1、对于mysql表
insert into employee values(null,'01234567890123456789012345678901234567890123456789A','male',1,'java')

提示得挺清晰的,什么字段长度不足导致错误都有提示

> 1406 - Data too long for column 'name' at row 1
> 时间: 0.037s
2、pgsql

表结构如下
在这里插入图片描述

insert into t_test values (1, '0123456789012345678901234567890123456789A','man');

insert into t_test values (2, 'stone','0123456789012345678901234567890123456789A');

错误提示,上面2句执行后,都是一样的提示,没法区分是哪个字段导致的,因为name和remark都是varchar(20)

> ERROR:  value too long for type character varying(20)

以上是关于关于字段超长导致的插入错误的提示信息(value too long for type character varying)的主要内容,如果未能解决你的问题,请参考以下文章

oracle中-947错误信息

MySQL数据库字段超长问题

JDBC插入数据超长时无法自动截断问题

环境变量PATH超长问题[转]

SQLServer数据库表字段超长,找到超长字段脚本

关于mysql 出现 1264 Out of range value for column 错误的解决办法