【发布时间】:2011-07-12 12:14:24
【问题描述】:
在 MySQL 中,如果我们创建 INT 的字段 dataType 并且没有指定任何长度/值,那么它会自动变为 int(11) 并且如果我们设置属性 UNSIGNED 或 UNSIGNED ZEROFILL 然后变成int(10)
这个length(1)去哪儿了?
【问题讨论】:
标签: mysql types int unsigned-integer
在 MySQL 中,如果我们创建 INT 的字段 dataType 并且没有指定任何长度/值,那么它会自动变为 int(11) 并且如果我们设置属性 UNSIGNED 或 UNSIGNED ZEROFILL 然后变成int(10)
这个length(1)去哪儿了?
【问题讨论】:
标签: mysql types int unsigned-integer
int 值可以是 -2147483648 这些是 11 位数字,所以默认 display 大小是 11
unsigned int 不允许负数,所以默认情况下它只需要 display size 10
正如下面的文档所示,存储 SIGNED INT 和 UNSIGNED INT 所需的位数是相同的,可存储的数字范围只是移位了:
无符号类型可用于允许 列中只有非负数 或者当你需要更大的鞋面时 列的数值范围。为了 例如,如果一个 INT 列是 UNSIGNED, 列范围的大小是 相同,但它的端点从 -2147483648 和 2147483647 最高为 0 和 4294967295。
【讨论】:
根据the documentation,这个数字只是显示宽度。
例如,INT(4) 指定显示宽度为 4 的 INT 数字。
显示宽度不限制可取值范围 存储在列中。它也不会阻止比列更宽的值 显示宽度无法正确显示。例如,一列 指定为 SMALLINT(3) 的 SMALLINT 范围通常为 -32768 到 32767,三位数允许范围之外的值是 使用三个以上的数字完整显示。
UNSIGNEDINT 的默认显示宽度比非UNSIGNED INT 的显示宽度小一,因为您永远不会显示- 字符。
请注意,您仍然可以指定任何您喜欢的显示宽度。这只是默认。
文档中“数字”一词的使用在这里有点误导。
【讨论】:
以防有人不太了解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
【讨论】: