在mysql中int(11)的列的大小是多少?

mysql中int(11)列的大小是多少?

和可以存储在这些列中的最大值?

550020 次浏览

INT将始终是4个字节,无论指定了什么长度。

  • TINYINT = 1字节(8位)
  • SMALLINT = 2字节(16位)
  • MEDIUMINT = 3字节(24位)
  • INT = 4字节(32位)
  • BIGINT = 8字节(64位)。

长度只是指定在使用mysql命令行客户端选择数据时要填充多少字符。存储为int(3)的12345仍然会显示为12345,但如果存储为int(10),它仍然会显示为12345,但您可以选择填充前五位数字。例如,如果您添加了ZEROFILL,它将显示为0000012345。

... 最大值将是2147483647(有符号)或4294967295(无符号)

根据在这里int(11)将占用4个字节的空间,即32位空间,其中2^(31) = 2147483648为最大值,-2147483648min为最小值。一位是符号。

在mysql中int(11)的列的大小是多少?

(11) - int数据类型的属性与列的大小无关。它只是整数数据类型的显示宽度。从# EYZ2:

MySQL支持一个扩展,可选地指定显示 base关键字后面括号中的整数数据类型的宽度 对于类型。例如,INT(4)指定带显示的INT 四个数字的宽度

INT (< em > x < / em >)将使只是在展示方面有所不同,即显示x位数字,而不限于11位。您可以使用ZEROFILL对它进行配对,它将在0的前面,直到它匹配您的长度。

对于任意数量的xINT(x)

  • 如果存储值位数更少大于x,则ZEROFILL将以0开头。

INT(5)补零存储值为32将显示00032
存储值为32的INT (5)将显示32
INT将显示32

  • 如果存储的值是位数更多而不是x,它将显示它是什么。

INT(3)补零存储值为250000将显示250000
存储值为250000的INT (3)将显示250000
INT将显示250000

存储在数据库中的实际值不受影响,大小仍然相同,任何计算都将正常进行。

这也适用于BIGINTMEDIUMINTSMALLINTTINYINT

我认为int(11)的最大值是4294967295

4294967295是答案,因为int(11)显示最多11位数字IMO

在MySQL中,整数int(11)的大小为4字节,等于32位。

签名值为:-2^(32-1) to 0 to 2^(32-1)-1 = # EYZ0 < / p >

无符号值是:0 to 2^32-1 = # EYZ0 < / p >

虽然这个答案不太可能出现,但我认为有必要进行以下澄清:

  • 在MySQL中,整数数据类型后面的(n)指定显示宽度
  • 显示宽度不限制从查询返回的数字的长度
  • 显示宽度确实限制了零填充列的零填充数量,因此总数与显示宽度相匹配(只要实际数字不超过显示宽度,在这种情况下,数字显示原样)
  • 显示宽度也是开发人员了解值应该填充到什么长度的有用工具
< p > # EYZ0 < br > 显示宽度显然是为了提供一些元数据,以确定在一个填零的数字中显示多少个零 它实际上不限制从查询返回的数字的长度,如果该数字超出了指定的显示宽度 要知道在MySQL中整数数据类型的实际允许的长度/宽度是多少,请参阅list &链接:(# EYZ0); < br > 说了上面的话,可以预期显示宽度对标准查询的结果没有影响,除非列被指定为ZEROFILL columns
或< br > 在这种情况下,数据被拉入应用程序&该应用程序正在收集显示宽度以用于某些其他类型的填充

主要参考:https://blogs.oracle.com/jsmyth/entry/what_does_the_11_mean

一个很好的解释是< A href="https://web.archive.org/web/20161222191854/http://waynewhitty.ie/blog-post.php?id=19" rel="noreferrer">在这里
总结一下:int(N)中的数字N经常与允许列的最大大小相混淆,就像在varchar(N)的情况下一样。但这不是整数数据类型的情况- 括号中的数字N不是列的最大大小,而只是一个参数,告诉MySQL当通过MySQL控制台查看表的数据时(当你使用ZEROFILL属性时)显示列的宽度。 < br > < br > 括号中的数字将告诉MySQL用多少个零填充传入的整数。例如:如果你在一个被设置为INT(5)的列上使用ZEROFILL,并且插入了数字78,MySQL将用0填充该值,直到数字满足括号中的数字。比如78会变成00078,127会变成00127。总而言之:括号内的数字用于显示 在某种程度上,括号中的数字是无用的,除非你使用ZEROFILL属性

因此,int的大小将保持不变,即-2147483648到2147483648为签名0到4294967295为unsigned(~ 21.5亿和42亿,这是开发人员仍然不知道括号中数字N背后的故事的原因之一,因为它几乎不影响数据库,除非它包含超过20亿行),从字节方面来看,它将是4个字节.

有关整数类型大小/范围的更多信息,请参阅MySQL手册

正如其他人所说,列可以存储的最小/最大值以及以字节为单位占用多少存储空间仅由类型定义,而不是长度。

很多答案都说(11)部分只影响显示宽度,这并不完全正确,但主要是这样。

int(2)没有指定零填充的定义如下:

  • 仍然接受100的值
  • 输出时仍然是显示,值为100(不是000)
  • 显示宽度将是选择查询输出的最大值的宽度。

(2)唯一要做的就是如果还指定了zerofill:

  • 1的值将显示为01
  • 在显示值时,列将始终具有列可以取的最大可能值的宽度(对于整数来说是10位数字),而不是显示该列在特定选择查询中需要显示的最大值所需的最小宽度,后者可能要小得多。
  • 列仍然可以接受,并显示超过长度的值,但这些值不会以0作为前缀。

了解所有细微差别的最佳方法是运行:

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)。 对于大多数应用程序来说,这是没有意义的:它没有限制 合法的值范围,但只是指定字符的数量 MySQL的交互工具将保留用于显示目的。为 INT(1)与INT(20)相同。