55

在 MySQL 中,如果我们创建一个字段 dataTypeINT并且没有指定任何长度/值,那么它会自动变为int(11),如果我们设置属性UNSIGNEDUNSIGNED ZEROFILL然后它变成int(10)

这个 长度(1)去哪里了?

4

3 回答 3

75

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

unsigned int 不允许负数,因此默认情况下它只需要显示大小 10

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

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

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

于 2011-03-10T07:18:38.537 回答
24

根据文档,这个数字仅仅是显示宽度

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

显示宽度不限制可以存储在列中的值的范围。它也不会阻止正确显示比列显示宽度更宽的值。例如,指定为 SMALLINT(3) 的列的 SMALLINT 范围通常为 -32768 到 32767,超出三位数允许范围的值将使用多于三位的完整显示。

an的默认显示宽度UNSIGNED INT比 non- 小一,UNSIGNED INT因为您永远不会显示-字符。

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

文档中“数字”一词的使用在这里会产生轻微的误导。

于 2011-07-25T01:38:38.597 回答
10

以防有人不太理解沙克蒂的回答(因为我没有)。以下是原因的直观表示:

 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
于 2011-07-25T01:31:07.053 回答