mysql中int(11)列的大小是多less?
mysql中int(11)
列的大小是多less?
和最大值可以存储在这个列?
无论指定什么长度,INT总是4个字节。
- TINYINT = 1个字节(8位)
- SMALLINT = 2个字节(16位)
- MEDIUMINT = 3个字节(24位)
- INT = 4个字节(32位)
- BIGINT = 8个字节(64位)。
长度只是指定在使用mysql命令行客户端select数据时要显示的字符数。
…和最大值将是2147483647(签字)或4294967295(无符号)
据此, int(11)
将占用4个字节的空间,其空间为32位,最大值为2^(31) = 2147483648
最小值为-2147483648
。 有一点是标志。
INT( somenumber ) 只会在显示方面有所不同,即以“ somenumber ”数字显示数字,而不仅限于11,而是存储在数据库中的值不受影响。
注意 :
-
如果这个值比' somenumber 'less,那么你需要使用
ZEROFILL
属性来生效,否则根本没有什么区别。INT(5)ZEROFILL与存储值32将显示00032
存储值为32的INT(5)将显示32
存储值为32的INT将显示32 -
如果该值比“ somenumber ”更多,则显示存储的值。
INT(3)与存储的值250000将显示250000
mysql中int(11)列的大小是多less?
(11)
– int
数据types的这个属性与列的大小无关。 它只是整数数据types的显示宽度。 从11.1.4.5开始。 数字types属性 :
MySQL支持一个扩展,用于在types的基本关键字之后的括号内指定整型数据types的显示宽度。 例如,INT(4)指定一个显示宽度为四位的INT。
正如其他人所说,列可以存储的最小值/最大值以及占用多less字节的存储空间仅由types定义,而不是长度。
这些答案很多都是说(11)
部分只影响不完全正确的显示宽度,但主要是。
没有指定zerofill的int(2)
定义将会:
- 仍然接受
100
的价值 - 输出时仍然显示
100
(不是0
或00
) - 显示宽度将是从select查询输出的最大值的宽度。
(2)
唯一要做的就是如果还指定了zerofill :
- 将显示
01
的值。 - 在显示值时,列将始终具有列可以采用的最大可能值的宽度,对于整数而言, 列的最大可能值是10位数,而不是显示该列在特定select查询中需要显示的最大值所需的最小值宽度,这可能会小得多。
- 该列仍可以取,并显示超过长度的值,但这些值不会以0为前缀。
查看所有细微差别的最好方法是运行:
CREATE TABLE `mytable` ( `id` int(11) NOT NULL AUTO_INCREMENT, `int1` int(10) NOT NULL, `int2` int(3) NOT NULL, `zerofill1` int(10) ZEROFILL NOT NULL, `zerofill2` int(3) ZEROFILL NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `mytable` (`int1`, `int2`, `zerofill1`, `zerofill2`) VALUES (10000, 10000, 10000, 10000), (100, 100, 100, 100); select * from mytable;
这将输出:
+----+-------+-------+------------+-----------+ | id | int1 | int2 | zerofill1 | zerofill2 | +----+-------+-------+------------+-----------+ | 1 | 10000 | 10000 | 0000010000 | 10000 | | 2 | 100 | 100 | 0000000100 | 100 | +----+-------+-------+------------+-----------+
注意,即使长度较大, int1
列的显示宽度也比zerofill2
小得多。
这个答案针对Linux的MySQL 5.7.12进行了testing,对其他实现可能会有所不同,也可能不会有所不同。
这里可以find一个很好的解释
总结:int(N)括号中的数字通常与列允许的最大大小相混淆,就像在varchar(N)的情况下一样。
但是Integer数据types并不是这种情况 – 括号中的数字N不是列的最大大小,而只是一个参数,告诉MySQL当通过MySQL查看表的数据时显示列的宽度控制台(当您使用ZEROFILL属性时)。
括号中的数字将告诉MySQL有多less零填充传入的整数。 例如:如果您在设置为INT(5)的列上使用ZEROFILL并且插入了数字78,则MySQL将用零填充该值直到数字满足括号中的数字。 即78将成为00078,127将成为00127.总结:括号中的数字用于显示目的。
在某种程度上,除非你使用ZEROFILL属性,否则括号中的数字是无用的。
所以int的大小将保持相同,即-2147483648到2147483648为signed , 0到4294967295为unsigned (大约21.5亿和42亿,这是开发人员不知道括号内第N个数字的原因之一,因为它几乎不影响数据库,除非它包含超过20亿行),并且在字节方面它将是4个字节 。
有关整数types大小/范围的更多信息,请参阅MySQL手册
虽然这个答案不太可能被看到,但我认为以下澄清是值得的:
- MySQL中整数数据types后面的(n)指定了显示宽度
- 显示宽度不会限制查询返回的数字的长度
- 显示宽度DOES限制为零填充的列填充的零的数量,所以总数与显示宽度相匹配(只要实际数量不超过显示宽度,在这种情况下数字显示为)
- 显示宽度对于开发者来说也是一个有用的工具,可以知道值应该填充到什么长度
一点细节
显示宽度显然是为了提供一些关于在零填充数字中显示多less个零的元数据。
如果该数字高于指定的显示宽度,它实际上不会限制从查询返回的数字的长度。
要知道MySQL中整数数据types实际允许的长度/宽度,请参阅列表和链接:( types:TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT );
因此,如上所述,除非列被指定为ZEROFILL列,否则可以预期显示宽度对标准查询的结果没有影响
要么
在数据被拉入应用程序的情况下,该应用程序正在收集显示宽度以用于某种其他types的填充。
主要参考: 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
我认为int(11)的最大值是4294967295
4294967295是答案,因为int(11)显示IMO的最大值为11位