INT
的字段数据类型并且没有指定任何长度/值,那么它会自动变为int(11)
并且如果我们设置属性 UNSIGNED 或< strong> UNSIGNED ZEROFILL 然后变成int(10)
长度(1)在哪里?
答案 0 :(得分:67)
int值可以是-2147483648这些是11位数,因此默认 显示 大小为11
unsigned int不允许使用负数,因此默认情况下只需 显示 大小为10
如下面的文档所示,存储SIGNED INT和UNSIGNED INT所需的位数相同,可存储数字的范围仅仅移位:
无符号类型可用于允许 只列中的非负数 或者当你需要更大的上部 列的数字范围。对于 例如,如果INT列是UNSIGNED, 列范围的大小是 同样但它的终点从 -2147483648和2147483647最多0和4294967295。
答案 1 :(得分:24)
根据the documentation,此数字仅为显示宽度。
例如,INT(4)指定显示宽度为4的INT 位数。
显示宽度不会限制可以使用的值范围 存储在列中。它也不会阻止比列宽的值 正确显示显示宽度。例如,一列 指定为SMALLINT(3)的通常SMALLINT范围为-32768到 32767,超出三位数允许范围的值 使用三位数以上完整显示。
UNSIGNED
INT
的默认显示宽度比非UNSIGNED
INT
的显示宽度少一个,因为您永远不会显示-
字符。
请注意,您仍然可以指定您喜欢的任何显示宽度。这只是默认。
在文档中使用术语“数字”在这里有点误导。
答案 2 :(得分:7)
只是因为任何人都不太了解Shakti's answer(因为我没有)。以下是原因的直观表示:
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