MySQL 数据类型 INT(11) 而 UNSIGNED INT(10)?
Posted
技术标签:
【中文标题】MySQL 数据类型 INT(11) 而 UNSIGNED INT(10)?【英文标题】:MySQL datatype INT(11) whereas UNSIGNED INT(10)? 【发布时间】:2011-07-12 12:14:24 【问题描述】:在 mysql 中,如果我们创建 INT
的字段 dataType 并且没有指定任何长度/值,那么它会自动变为 int(11)
并且如果我们设置属性 UNSIGNED 或 UNSIGNED ZEROFILL 然后变成int(10)
这个length(1)去哪儿了?
【问题讨论】:
【参考方案1】:int 值可以是 -2147483648 这些是 11 位数字,所以默认 display 大小是 11
unsigned int 不允许负数,所以默认情况下它只需要 display size 10
正如下面的文档所示,存储 SIGNED INT 和 UNSIGNED INT 所需的位数是相同的,可存储的数字范围只是移位了:
无符号类型可用于允许 列中只有非负数 或者当你需要更大的鞋面时 列的数值范围。为了 例如,如果一个 INT 列是 UNSIGNED, 列范围的大小是 相同,但它的端点从 -2147483648 和 2147483647 最高为 0 和 4294967295。
http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html
【讨论】:
非常感谢......顺便说一句,我也来自 Bikaner :) @diEcho:太好了,我们都来自同一个地方。很高兴在 SO 上与您交谈 Hello Rajasthanis :).. 你的帖子仍在帮助我们 :) 所以如果我理解正确的话,数值(10 或 11)与分配给该列的内存大小无关,但字符数允许形成数字?因此,将列设置为 UNSIGNED INT(11) 将不允许比 UNSIGNED INT(10) 更多的数字?【参考方案2】:根据the documentation,这个数字只是显示宽度。
例如,INT(4) 指定显示宽度为 4 的 INT 数字。
显示宽度不限制可取值范围 存储在列中。它也不会阻止比列更宽的值 显示宽度无法正确显示。例如,一列 指定为 SMALLINT(3) 的 SMALLINT 范围通常为 -32768 到 32767,三位数允许范围之外的值是 使用三个以上的数字完整显示。
UNSIGNED
INT
的默认显示宽度比非UNSIGNED
INT
的显示宽度小一,因为您永远不会显示-
字符。
请注意,您仍然可以指定任何您喜欢的显示宽度。这只是默认。
文档中“数字”一词的使用在这里有点误导。
【讨论】:
那太好了。表示显示宽度,不是取值范围。【参考方案3】:以防有人不太了解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
【讨论】:
保存值的空格与此无关。这只是显示宽度,不会以任何方式限制存储的值。 带符号的最大值不是 2^32-1 而是 2^31-1,因为符号只有一位,所以 unsigned max != signed max。以上是关于MySQL 数据类型 INT(11) 而 UNSIGNED INT(10)?的主要内容,如果未能解决你的问题,请参考以下文章
MySQL 中的 CASE 强制列数据类型为 BIGINT 而不是 INT