但是这不是Integer数据类型的情况 - the number N in the parentheses is not the maximum size for the column, but simply a parameter to tell MySQL what width to display the column at when the table's data is being viewed via the MySQL console (when you're using the ZEROFILL attribute).
所以int的大小将保持不变,即 -2147483648 to 2147483648 for signed 和 0 to 4294967295 for unsigned (~215亿和4.2亿,这是开发人员仍然不知道括号中数字N背后的故事的原因之一,因为它几乎不影响数据库,除非它包含超过2亿个行),并且就字节而言,它将是 4 bytes .
11 回答
无论指定的长度如何,
INT
将始终为4个字节 .TINYINT
= 1个字节(8位)SMALLINT
= 2个字节(16位)MEDIUMINT
= 3个字节(24位)INT
= 4个字节(32位)BIGINT
= 8个字节(64位) .长度仅指定使用mysql命令行客户端选择数据时要显示的字符数 .
......最大值为2147483647(签名)或4294967295(未签名)
INT(somenumber)会产生差异 only in term of display ,即以“somenumber”数字显示数字,而不仅限于11.您使用
ZEROFILL
对它进行配对,它将前置零,直到它与您的长度匹配请注意,存储在数据库中的值不受影响,任何计算仍将按原样运行 .
备注:
ZEROFILL
将前置为零 .类似的情况也适用于BIGINT,MEDIUMINT,SMALLINT和TINYINT .
根据here,
int(11)
将占用4个字节的空间,即32位空间,最大值为2^(31) = 2147483648
,最小值为-2147483648
. 一点是签名 .正如其他人所说,列可以存储的最小/最大值以及以字节为单位的存储量仅由类型而不是长度定义 .
很多这些答案都说
(11)
部分仅影响显示宽度,这不完全正确,但主要是 .int(2)
与 no zerofill specified 的定义将:仍然接受
100
的值输出时
仍为
100
100
的值(不是0
或00
)display width 将是从select查询输出的最大值的宽度 .
(2)
唯一能做的就是 if zerofill is also specified :1
的值将显示01
.显示值时,该列将始终具有 width of the maximum possible value the column could take (整数的10位数),而不是显示该列需要在该特定选择查询中显示的最大值所需的最小宽度,这可能要小得多 .
该列仍然可以使用,并显示超过长度的值,但这些值不会以0为前缀 .
查看所有细微差别的最佳方法是运行:
这将输出:
请注意
int1
列的显示宽度比zerofill2
小得多,即使长度较大 .这个答案是针对Linux的MySQL 5.7.12进行测试的,对于其他实现可能会有所不同 .
(11)
-int
数据类型的此属性与列的大小无关 . 它只是整数数据类型的显示宽度 . 来自11.1.4.5. Numeric Type Attributes:可以找到一个很好的解释here
总结:int(N)中的数字N通常与列允许的最大大小相混淆,就像varchar(N)的情况一样 .
但是这不是Integer数据类型的情况 - the number N in the parentheses is not the maximum size for the column, but simply a parameter to tell MySQL what width to display the column at when the table's data is being viewed via the MySQL console (when you're using the ZEROFILL attribute).
括号中的数字将告诉MySQL有多少个零来填充传入的整数 . 例如:如果您在设置为INT(5)的列上使用ZEROFILL并且插入了数字78,则MySQL将使用零填充该值,直到该数字满足括号中的数字 . 即,78将变为00078,127将变为00127 . 总结:括号中的数字用于显示目的 .
在某种程度上,除非您使用ZEROFILL属性,否则括号中的数字是无用的 .
所以int的大小将保持不变,即 -2147483648 to 2147483648 for signed 和 0 to 4294967295 for unsigned (~215亿和4.2亿,这是开发人员仍然不知道括号中数字N背后的故事的原因之一,因为它几乎不影响数据库,除非它包含超过2亿个行),并且就字节而言,它将是 4 bytes .
有关整数类型大小/范围的更多信息,请参阅MySQL Manual
虽然不太可能看到这个答案,但我认为以下澄清是值得的:
MySQL中整数数据类型后面的(n)指定显示宽度
显示宽度不限制查询返回的数字的长度
显示宽度DOES限制为零填充列填充的零的数量,因此总数与显示宽度匹配(只要实际数字不超过显示宽度,在这种情况下数字显示为)
显示宽度也是一个有用的工具,供开发人员知道应该填充的值的长度
A BIT OF DETAIL
显然,显示宽度旨在提供关于在零填充数字中显示多少个零的一些元数据 .
如果该数字超出指定的显示宽度,它实际上并不限制从查询返回的数字的长度 .
要知道MySQL中整数数据类型实际允许的长度/宽度,请参阅列表和链接:(types: TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT);
因此,如上所述,您可以预期显示宽度不会影响标准查询的结果,除非将列指定为ZEROFILL列
要么
在将数据拉入应用程序并且该应用程序正在收集显示宽度以用于某种其他类型的填充的情况下 .
主要参考:https://blogs.oracle.com/jsmyth/entry/what_does_the_11_mean
在MySQL整数
int(11)
中,大小为4个字节,等于32位 .签名值为: -
2^(32-1) to 0 to 2^(32-1)-1
=-2147483648 to 0 to 2147483647
无符号值为:
0 to 2^32-1
=0 to 4294967295
据此book:
我认为int(11)的最大值是4294967295
4294967295就是答案,因为int(11)显示最多11位IMO