MySQL数据typesINT(11),而UNSIGNED INT(10)?
在MySQL中,如果我们创build一个字段的数据types的INT
,并没有指定任何长度/值,那么它会自动成为int(11)
,如果我们设置属性UNSIGNED或UNSIGNED ZEROFILL那么它变成了int(10)
这个长度(1)在哪里?
int值可以是-2147483648这些是11位数,所以默认的显示大小是11
无符号整数不允许负数,所以默认情况下它只需要显示大小10
如下面的文档所示,存储SIGNED INT和UNSIGNED INT所需的位数是相同的,可存储的数字范围仅仅是移位的:
无符号types可用于只允许列中的非负数,或者当您需要列的较大数值范围时。 例如,如果INT列是UNSIGNED,则列的范围的大小是相同的,但其端点从-2147483648和2147483647转移到0和4294967295。
根据文件 ,这个数字只是显示宽度 。
例如,INT(4)指定一个显示宽度为四位的INT。
显示宽度不限制可存储在列中的值的范围 。 它也不会阻止比列显示宽度更宽的值显示正确。 例如,指定为SMALLINT(3)的列的常用SMALLINT范围为-32768至32767,并且三位数所允许的范围之外的值全部使用三位以上的数字显示。
UNSIGNED
INT
的默认显示宽度比非UNSIGNED
INT
的默认显示宽度less一个,因为您永远不会显示-
字符。
请注意,您仍然可以指定您喜欢的任何显示宽度。 这只是默认设置 。
在文档中使用术语“数字”在这里略有误导。
只要告诉任何人不太了解沙克蒂的答案 (因为我没有)。 这是一个为什么的视觉表示:
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