MySQL数据类型INT(11)而UNSIGNED INT(10)?

时间:2011-03-10 07:12:40

标签: mysql types int unsigned-integer

在MySQL中如果我们创建一个INT的字段数据类型并且没有指定任何长度/值,那么它会自动变为int(11)并且如果我们设置属性 UNSIGNED 或< strong> UNSIGNED ZEROFILL 然后变成int(10)

长度(1)在哪里?

3 个答案:

答案 0 :(得分:67)

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

答案 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