背景
最近在测试的时候,测试环境突然报错了,这个报错在实际的开发中还是比较熟悉的。遇见问题那就解决问题呗。
原因
由于这个报错,导致新插入的数据都存储失败,在查看数据库表以后发现有条数据的主键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位时,就没有任何的影响。
感谢您的阅读,如果您感觉本篇博客还不错,请帮忙留言+点赞+收藏呗。~~
|