今天碰到了一个问题,数据库int字段超限
错误:
我定义的是int(11)
然后存的数字是3999990394,发现存不进去,最开始以为是长度不够,然后给改成了int(16)
,发现还是报错。
错误提示:
### Cause: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Out of range value for column '字段名' at row 1;
SQL []; Data truncation: Out of range value for column '字段名' at row 1;
nested exception is com.mysql.jdbc.MysqlDataTruncation: Data truncation: Out of range value for column '字段名' at row 1
尝试
其实以前我就对int(11)
中int后边的11不是很明白,创建表的时候说的是长度,所以就理所当然的被我当做是数字的长度,但是我把长度改大之后还是报错,所以应该还是我没理解对。然后我再把int(11)
改成bigint(11)
可以存储成功,然后把bigint(11)
改为bigint(1)
还是可以存储成功。
原因
其实在数据库中定义字段类型的时候,int(x)
中的X真没必要写出来,因为X不起任何作用。类似,bigint(x)
也一样,写X与不写应该都是一个效果,其在数据库中所能存储的最大值只是与其自己本身表示的字段长度有关。但是varchar(x)
中的x是有作用的,起到限制字符串长度的作用。
总结
类似于int(x)、bigint(x)
中的x其实没必要写,或者写了也没什么作用,其储的最大值只是与其自己本身表示的字段长度有关。所以把int(x)
改为bigint(x)
,就不会再报错了。
以上总结如有疑问,欢迎探讨、如有错误,欢迎指出