关于字段超长导致的插入错误的提示信息(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)的主要内容,如果未能解决你的问题,请参考以下文章