Duplicate entry ‘2147483647‘ for key ‘PRIMARY

背景

最近在测试的时候,测试环境突然报错了,这个报错在实际的开发中还是比较熟悉的。遇见问题那就解决问题呗。

原因

由于这个报错,导致新插入的数据都存储失败,在查看数据库表以后发现有条数据的主键id值是2147483647,2147483647 是32位操作系统中最大的符号型整型常量。所以再次插入数据的时候会一直报这个数的主键冲突。

解决方案

方法一:重设表的自增值

alter table tableName AUTO_INCREMENT=0;

方法二:修改id的数据类型

把id的int类型改成了bigint,bigint的数据范围比较大。

知识补充-MySQL的数据类型

TINYINT[(M)] [UNSIGNED] [ZEROFILL]
一个很小的整数。有符号的范围是-128到127,无符号的范围是0到255

SMALLINT[(M)] [UNSIGNED] [ZEROFILL]
一个小整数。有符号的范围是-32768到32767,无符号的范围是0到65535。

MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]
一个中等大小整数。有符号的范围是-8388608到8388607,无符号的范围是0到16777215。

INT[(M)] [UNSIGNED] [ZEROFILL]
一个正常大小整数。有符号的范围是-2147483648到2147483647,无符号的范围是0到4294967295。

INTEGER[(M)] [UNSIGNED] [ZEROFILL]
这是INT的一个同义词。

BIGINT[(M)] [UNSIGNED] [ZEROFILL]
一个大整数。有符号的范围是-9223372036854775808到9223372036854775807,无符号的范围是0到 18446744073709551615。

这里的M代表的并不是存储在数据库中的具体的长度,以前总是会误以为int(3)只能存储3个长度的数字,int(11)就会存储11个长度的数字,这是大错特错的。其实当我们在选择使用int的类型的时候,不论是int(3)还是int(11),它在数据库里面存储的都是4个字节的长度,在使用int(3)的时候如果你输入的是10,会默认给你存储位010,也就是说这个3代表的是默认的一个长度,当你不足3位时,会帮你补全,当你超过3位时,就没有任何的影响。

感谢您的阅读,如果您感觉本篇博客还不错,请帮忙留言+点赞+收藏呗。~~

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>