MySQL数据typesINT(11),而UNSIGNED INT(10)?

在MySQL中,如果我们创build一个字段的数据types的INT ,并没有指定任何长度/值,那么它会自动成为int(11) ,如果我们设置属性UNSIGNEDUNSIGNED ZEROFILL那么它变成了int(10)

这个长度(1)在哪里?

int值可以是-2147483648这些是11位数,所以默认的显示大小是11

无符号整数不允许负数,所以默认情况下它只需要显示大小10

如下面的文档所示,存储SIGNED INT和UNSIGNED INT所需的位数是相同的,可存储的数字范围仅仅是移位的:

无符号types可用于只允许列中的非负数,或者当您需要列的较大数值范围时。 例如,如果INT列是UNSIGNED,则列的范围的大小是相同的,但其端点从-2147483648和2147483647转移到0和4294967295。

http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html

根据文件 ,这个数字只是显示宽度

例如,INT(4)指定一个显示宽度为四位的INT。

显示宽度不限制可存储在列中的值的范围 。 它也不会阻止比列显示宽度更宽的值显示正确。 例如,指定为SMALLINT(3)的列的常用SMALLINT范围为-32768至32767,并且三位数所允许的范围之外的值全部使用三位以上的数字显示。

UNSIGNED INT默认显示宽度比非UNSIGNED INT默认显示宽度less一个,因为您永远不会显示-字符。

请注意,您仍然可以指定您喜欢的任何显示宽度。 这只是默认设置

在文档中使用术语“数字”在这里略有误导。

只要告诉任何人不太了解沙克蒂的答案 (因为我没有)。 这是一个为什么的视觉表示:

  Signed minimum: - 2 1 4 7 4 8 3 6 4 8 1 2 3 4 5 6 7 8 9 10 11 Unsigned max (also the signed max): 4 2 9 4 9 6 7 2 9 5 1 2 3 4 5 6 7 8 9 10