int(11)
mysql中以字节为单位的列大小是多少?
以及可以在此列中存储的最大值?
int(11)
mysql中以字节为单位的列大小是多少?
以及可以在此列中存储的最大值?
Answers:
INT
不论指定什么长度,An 始终为4个字节。
TINYINT
= 1个字节(8位)SMALLINT
= 2个字节(16位)MEDIUMINT
= 3个字节(24位)INT
= 4个字节(32位)BIGINT
= 8字节(64位)。该长度仅指定使用mysql命令行客户端选择数据时要填充的字符数。存储为12345的int(3)
仍将显示为12345,但是如果存储int(10)
为12345,其仍将显示为12345,但是您可以选择填充前五个数字。例如,如果添加ZEROFILL
,它将显示为0000012345。
...且最大值将为2147483647(带符号)或4294967295(无符号)
INT(x)仅在显示方面有所不同,即以x位显示数字,并且不限于11。您可以使用进行配对ZEROFILL
,它将以零开头,直到匹配您的长度。
因此,对于任何数量的X在INT(x)
如果所存储的值的位数少于x,ZEROFILL
则将前面加零。
INT(5)存储值为32的ZEROFILL将显示00032
INT(5)存储值为32的INT(5)将显示32
INT存储值为32的INT将显示32
如果存储的数值比x多,它将按原样显示。
INT(3)存储值为250000的ZEROFILL将显示250000
INT(3)存储值为250000的
INT将显示250000 INT存储值为250000的INT将显示250000
数据库中存储的实际值不受影响,大小仍然相同,任何计算都将正常进行。
这也适用于BIGINT,MEDIUMINT,SMALLINT和TINYINT。
ZEROFILL
。
就像其他人所说的那样,该列可以存储的最小值/最大值以及以字节为单位的存储量仅由类型(而不是长度)定义。
这些答案中有很多都说该(11)
零件仅影响显示宽度,这并不完全正确,但主要是。
的定义int(2)
有没有指定ZEROFILL将:
100
100
when输出的值(不是0
或00
)唯一要做的(2)
是如果还指定了zerofill:
1
将显示的值01
。看到所有细微差别的最佳方法是运行:
CREATE TABLE `mytable` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`int1` int(10) NOT NULL,
`int2` int(3) NOT NULL,
`zf1` int(10) ZEROFILL NOT NULL,
`zf2` int(3) ZEROFILL NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `mytable`
(`int1`, `int2`, `zf1`, `zf2`)
VALUES
(10000, 10000, 10000, 10000),
(100, 100, 100, 100);
select * from mytable;
将输出:
+----+-------+-------+------------+-------+
| id | int1 | int2 | zf1 | zf2 |
+----+-------+-------+------------+-------+
| 1 | 10000 | 10000 | 0000010000 | 10000 |
| 2 | 100 | 100 | 0000000100 | 100 |
+----+-------+-------+------------+-------+
该答案已针对Linux的MySQL 5.7.12进行了测试,对于其他实现可能有所不同。
mysql中int(11)的列大小是多少?
(11)
- int
数据类型的此属性与列的大小无关。它只是整数数据类型的显示宽度。从11.1.4.5。数值类型属性:
MySQL支持扩展,可以选择在整数类型的基本关键字之后的括号中指定整数数据类型的显示宽度。例如,INT(4)指定显示宽度为四位数的INT。
这方面的一个很好的解释可以发现,在这里
总结一下:在INT(N)的N个经常被允许列的最大尺寸混淆,因为在为varchar(N)的情况一样。
但这不是Integer数据类型的情况- 括号中的数字N不是列的最大大小,而是一个简单的参数,告诉MySQL通过MySQL查看表数据时显示列的宽度控制台(使用ZEROFILL属性时)。
方括号中的数字将告诉MySQL使用多少个零来填充传入的整数。例如:如果在设置为INT(5)的列上使用ZEROFILL并且插入了数字78,则MySQL将用零填充该值,直到该数字满足方括号中的数字为止。即78将变为00078,127将变为00127。总结起来:括号中的数字用于显示目的。
在某种程度上,除非您使用ZEROFILL属性,否则括号中的数字是无用的。
因此,大小为INT将保持相同即-2147483648到2147483648的签署和 0至4294967295无符号(〜21.5亿和42亿,这是开发人员仍然不知道括号N背后的故事的原因之一,因为除非包含超过20亿行,否则它几乎不会影响数据库),并且就字节而言将是4个字节。
有关整数类型大小/范围的更多信息,请参阅MySQL手册
尽管这个答案不太可能看到,但我认为以下澄清值得一说:
显然,显示宽度的细节旨在提供一些元数据,以显示在零填充数字中要显示多少个零。
如果该数字超过指定的显示宽度,则实际上并没有限制该查询返回的数字的长度。
要了解MySQL中整数数据类型实际上允许的长度/宽度,请参见列表和链接:(类型:TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT);
综上所述,您可以预期显示宽度不会影响标准查询的结果,除非将这些列指定为ZEROFILL列,
或者
在将数据拉入应用程序且该应用程序正在收集数据的情况下显示宽度,用于其他类型的填充。
主要参考:https : //blogs.oracle.com/jsmyth/entry/what_does_the_11_mean
n
使任何数字丢失,所以...是的,这就是胡扯。它只对zerofill执行任何操作。
在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
根据这本书:
MySQL使您可以为整数类型(例如INT(11))指定“宽度”。这对于大多数应用程序是没有意义的:它不限制值的合法范围,而只是指定MySQL的交互式工具将保留用于显示目的的字符数。出于存储和计算目的,INT(1)与INT(20)相同。