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

diE*_*cho 50 mysql int types unsigned-integer

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

长度(1)在哪里?

Sha*_*ngh 69

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

  • 非常感谢..顺便说一句,我也来自Bikaner :) (3认同)

Lig*_*ica 24

根据文档,这个数字仅仅是显示宽度.

例如,INT(4)指定显示宽度为四位的INT.

显示宽度不会限制可以存储在列中的值的范围.它也不会阻止比列显示宽度更宽的值正确显示.例如,指定为SMALLINT(3)的列的通常SMALLINT范围为-32768到32767,超出三位数允许的范围之外的值将使用三位数以上的方式完整显示.

a的默认显示宽度UNSIGNED INT比非的显示宽度少一个,UNSIGNED INT因为您永远不会显示-字符.

请注意,您仍然可以指定您喜欢的任何显示宽度.这只是默认值.

在文档中使用术语"数字"在这里有点误导.


Dar*_*ein 8

只是因为任何人都不太了解Shakti的答案(因为我没有).以下是为什么的直观表示:

 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
Run Code Online (Sandbox Code Playgroud)

  • 签名的最大值不是2 ^ 32-1而是2 ^ 31-1,因为你有一位符号,所以unsigned max!= signed max. (3认同)