mysql中int(11)列的大小(以字节为单位)是多少?

时间:2011-04-12 10:58:36

标签: mysql types int

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

可以存储在此列中的最大值?

10 个答案:

答案 0 :(得分:592)

无论指定的长度如何,INT始终为4个字节。

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

长度只指定使用mysql命令行客户端选择数据时要显示的字符数。

...最大值为2147483647(签名)或4294967295(未签名)

答案 1 :(得分:128)

INT( somenumber )只会在显示方面产生差异,即以“ somenumber ”数字显示数字,并且不仅限于11.您使用ZEROFILL对其进行配对,这将在它之前添加零,直到它与您的长度匹配

请注意,存储在数据库中的值不受影响,任何计算仍将按原样运行。

备注:

  • 如果该值的数字少于“ somenumber ”,则ZEROFILL将前置为零。

      存储值为32的

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

  • 如果值的数字多于“ somenumber ”,则会显示存储的值。

      存储值为250000的

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

类似的也适用于BIGINT,MEDIUMINT,SMALLINT和TINYINT。

答案 2 :(得分:102)

根据hereint(11)将占用4个字节的空间,即32位空间,最大值为2^(31) = 2147483648,最小值为-2147483648。一点是签名。

答案 3 :(得分:31)

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

很多这些答案都说(11)部分仅影响显示宽度,但不是很正确,但主要是。

没有指定zerofill 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,
    `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进行了测试,对于其他实现可能会有所不同。

答案 4 :(得分:30)

  

mysql中int(11)列的大小(以字节为单位)是多少?

(11) - int数据类型的此属性与列的大小无关。它只是整数数据类型的显示宽度。来自11.1.4.5. Numeric Type Attributes

  

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

答案 5 :(得分:18)

可以找到一个很好的解释here
总结: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(无签名)(~215亿和4.2亿,这是其中一个开发人员仍然不知道括号中数字N背后的故事的原因,因为它几乎不影响数据库,除非它包含超过2亿个行),并且就字节而言,它将 4个字节。 / p>

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

答案 6 :(得分:10)

虽然不太可能看到这个答案,但我认为以下澄清是值得的:

  • MySQL中整数数据类型后面的(n)指定显示宽度
  • 显示宽度不限制查询返回的数字的长度
  • 显示宽度DOES限制为零填充列填充的零的数量,因此总数与显示宽度匹配(只要实际数字不超过显示宽度,在这种情况下数字显示为)
  • 显示宽度也是一个有用的工具,供开发人员知道应该填充的值的长度

一点细节
显然,显示宽度旨在提供一些关于在零填充数字中显示多少个零的元数据 如果该数字高于指定的显示宽度,它实际上并不限制从查询返回的数字的长度 要知道MySQL中整数数据类型实际允许的长度/宽度,请参阅列表&链接:(types: TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT);
因此,如上所述,除非将列指定为ZEROFILL列,否则您可以预期显示宽度不会影响标准查询的结果。 或
在数据被拉入应用程序的情况下该应用程序正在收集显示宽度以用于其他类型的填充。

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

答案 7 :(得分:0)

根据此book

  

MySQL使您可以为整数类型(例如INT(11))指定“宽度”。   对于大多数应用而言,这是没有意义的:它并不限制   合法的值范围,但仅指定字符数   MySQL的交互式工具将保留用于显示。对于   存储和计算目的,INT(1)与INT(20)相同。

答案 8 :(得分:-4)

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

答案 9 :(得分:-9)

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