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)部分只影响不完全正确的显示宽度,但主要是。

没有指定zerofillint(2)定义将会:

  • 仍然接受100的价值
  • 输出时仍然显示 100 (不是000
  • 显示宽度将是从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为signed0到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位