在 MySQL 中,如果我们创建一个字段 dataTypeINT
并且没有指定任何长度/值,那么它会自动变为int(11)
,如果我们设置属性UNSIGNED或UNSIGNED ZEROFILL然后它变成int(10)
这个 长度(1)去哪里了?
在 MySQL 中,如果我们创建一个字段 dataTypeINT
并且没有指定任何长度/值,那么它会自动变为int(11)
,如果我们设置属性UNSIGNED或UNSIGNED ZEROFILL然后它变成int(10)
这个 长度(1)去哪里了?
int 值可以是 -2147483648 这些是 11 位,所以默认显示大小是 11
unsigned int 不允许负数,因此默认情况下它只需要显示大小 10
正如下面的文档所示,存储 SIGNED INT 和 UNSIGNED INT 所需的位数是相同的,可存储数字的范围只是移动了:
无符号类型可用于在列中仅允许非负数,或者当您需要该列的较大数值范围时。例如,如果 INT 列是 UNSIGNED,则列范围的大小相同,但其端点从 -2147483648 和 2147483647 移动到 0 和 4294967295。
根据文档,这个数字仅仅是显示宽度。
例如,INT(4) 指定显示宽度为四位的 INT。
显示宽度不限制可以存储在列中的值的范围。它也不会阻止正确显示比列显示宽度更宽的值。例如,指定为 SMALLINT(3) 的列的 SMALLINT 范围通常为 -32768 到 32767,超出三位数允许范围的值将使用多于三位的完整显示。
an的默认显示宽度UNSIGNED
INT
比 non- 小一,UNSIGNED
INT
因为您永远不会显示-
字符。
请注意,您仍然可以指定您喜欢的任何显示宽度。这只是默认设置。
文档中“数字”一词的使用在这里会产生轻微的误导。
以防有人不太理解沙克蒂的回答(因为我没有)。以下是原因的直观表示:
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