为什么我在MySQL中设置更大的INT数据类型长度时没有出错?

20 浏览
0 Comments

为什么我在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

0
0 Comments

问题原因:MySQL中设置INT数据类型的长度时,即使设置了较大的长度,也不会出现错误。这可能是因为显示宽度设置并不智能,无法识别冲突。

解决方法:由于显示宽度只是对客户端程序的建议,因此并不需要强制限制。

0
0 Comments

为什么在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行为,而不影响存储的数字范围。

0