为什么我在MySQL中设置更大的INT数据类型长度时没有出错?
为什么我在MySQL中设置更大的INT数据类型长度时没有出错?
对于MySql中的数据类型长度,我有些困惑;我在http://dev.mysql.com/doc/refman/5.0/en/data-types.html上阅读了参考手册,知道当我写"INT(M)"时...
M表示整数类型的最大显示宽度。对于浮点数和定点数类型,M是可以存储的总位数。对于字符串类型,M是最大长度。M的最大允许值取决于数据类型。
然后,我在我的表中添加了一个字段数据类型为INT(10) [非无符号],我知道最大值是-2147483648 / 2147483647
然而,如果我将其编辑为INT(11),MySQL允许我设置一个更大的长度而不报错,尽管长度超出了范围;在这种情况下,只有当我设置一个大于2147483647的值时才会出错,为什么不是之前?
提前谢谢,
Max
为什么在MySQL中设置较大的INT数据类型长度时不会出现错误?
MySQL中的INT数据类型长度(M值)不影响您可以存储的数字范围。您可以在INT(1)和INT(30)中保存相同的数字。数字仅影响ZEROFILL行为。
例如,我们创建了一个临时表foobar,其中x列的数据类型是INT(40) ZEROFILL。我们插入了一个值为42的行,并进行查询。
CREATE TEMPORARY TABLE foobar(x INT(40) ZEROFILL);
INSERT INTO foobar(x) VALUES (42);
SELECT * FROM foobar;
查询结果如下:
x
0000000000000000000000000000000000000042
从结果可以看出,无论INT数据类型的长度是多少,都会以相同的形式存储数据。
因此,即使在创建表时设置了较大的INT数据类型长度,也不会出现错误,因为这个长度值只影响ZEROFILL行为,而不影响存储的数字范围。
解决方法:无需采取任何特殊的解决方法,因为这并不是一个错误。我们只需要了解INT数据类型的长度只影响ZEROFILL行为,而不影响存储的数字范围。