在MYSQL中使用int(11)数据类型时遇到的问题
问题的出现原因是:int(11)数据类型在MySQL中只是用来显示宽度,对实际存储的数值没有影响。无论将int的显示宽度设置为多少,它的存储范围仍然是-2147483648到2147483647(有符号)或0到4294967295(无符号)。因此,无论将int的显示宽度设置为11还是20,都无法存储超出这个范围的值。
问题的解决方法是:不能仅通过增加int的显示宽度来扩大其存储范围。如果需要存储超出int的范围的值,可以考虑使用其他数据类型,如bigint。bigint可以存储更大的整数值,其有符号范围为-9223372036854775808到9223372036854775807,无符号范围为0到18446744073709551615。
以下是对话中的具体内容,包括问题的出现和解决方法:
定义了MySQL手册中int数据类型的说明:
int是常规大小的整数类型。有符号范围为-2147483648到2147483647,无符号范围为0到4294967295。
int类型始终是4字节(32位)。int(11)中的11只是“显示宽度”,只对UNSIGNED ZEROFILL列有影响。关于此问题的更多详情,请参考此博客文章。
尝试插入一个id=523826的记录,但实际插入的是450258。为什么会这样?同时,我已经将大小增加到int(20)。
你能贴出INSERT查询吗?
你不能仅通过增加INT的大小到20来扩大其范围。整数列括号中的数字只用于填充值为零的情况,它将填充到指定的字符数。否则,它对可以插入的值没有任何控制。INT永远无法存储超出+/-2147483648或4294967295(无符号)范围之外的值。
问题的原因是MySQL中的INT数据类型只有32位,INT(11)表示有符号的INT,对于ID来说是无用的。将其改为无符号的INT将自动将可用的ID数量增加一倍。即使11“看起来”更大,是因为它考虑了数字的“长度”,如果是最大的负数(-2147483648),长度为11个字符。
解决方法是使用BIGINT数据类型,它可以使用64位,可以是有符号或无符号。再次强调,使用无符号将允许使用两倍数量的ID(>0)。
正如上面提到的,如果您的PHP不支持64位整数,那么您将无法轻松地使用它们。
希望对您有所帮助。
我正在使用java,java Integer可以保存523826。当我将其插入数据库时出现问题。
请提供您正在使用的SQL以及表结构。