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

Gau*_*rav 458 mysql int types

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

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

Mat*_*ean 637

一个INT将永远是4个字节,无论是指定的内容长度.

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

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

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

  • INT(11)表示无论如何,您希望整数最多显示11位数.因此,如果存储大于11位的整数 - 它将仅显示为具有11位数字,但其实际值将被存储. (202认同)
  • 那么int(11)中的11是什么意思呢. (95认同)
  • 如果列也被指定为zerofill,则列INT(4),整数1将仅显示为0001.否则,它将仅显示为数字1,没有额外的数字.@Gaurav - 不要混淆mysql如何显示数据以及如何存储数据,这些是两回事.你所看到的并不是它真正的本质. (69认同)
  • @andrewtweber:`5001`将显示为'5001`,即使字段被定义为`INT(3)`.请参阅下面的@priyabagus [答案](http://stackoverflow.com/a/27519793/3366962)和[此处](https://blogs.oracle.com/jsmyth/entry/what_does_the_11_mean). (14认同)
  • @Michael哇,真的很有意思.因此,如果您创建列INT(3)并存储值5001,它将存储5001但仅显示1.我不知道. (12认同)
  • 你不提供整数字段的长度,MySQL会设置一个默认值(tinyint 4,smallint 6,mediumint 9,int 11,bigint 20)值得注意的是,这些默认长度足以显示任何数字可存储在此字段中(例如:smallint最大值为2 ^ 16 = 65536,5位)除非您有充分理由不这样做,否则我建议保留默认大小以避免出现意外情况. (7认同)
  • @Gaurav也许在它之前用`-`进行"10"整理. (4认同)
  • (11)定义从mysql命令行中选择时要使用的空格数.例.INT(4)将显示为| 0001 | INT(11)显示为| 00000000001 |的位置.但实际数字仍然使用4个字节存储,最大值为2147483647(签名)或4294967295(无符号) (4认同)

pri*_*gus 151

INT(somenumber)只会在显示方面产生差异,即以" somenumber "数字显示数字,而不仅限于11.您使用它进行配对ZEROFILL,它将前置零,直到它与您的长度匹配

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

备注:

  • 如果该值的数字少于' somenumber ',ZEROFILL则将前置为零.

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

  • 如果该值的数字多于" somenumber ",则将显示存储的值.

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

类似的情况也适用于BIGINT,MEDIUMINT,SMALLINT和TINYINT.

  • 所以除非你使用zerofill,否则长度绝对没有? (43认同)
  • @developerbmw - 正确.除非你使用"ZEROFILL",否则长度绝对没有. (22认同)
  • ZEROFILL本质上是大型机兼容模式。 (4认同)

San*_*kha 110

根据这里,int(11)将占用4个字节的空间,即32位空间,具有 2^(31) = 2147483648最大值和-2147483648最小值.一点是签名.

  • 或者更确切地说,(2 ^ 32)-1. (7认同)
  • 不,如果是unsigned int,则最大数为4294967295,即2 ^ 32.括号中的数字不会影响存储类型.如果你需要超过2 ^ 32,你需要去bigint. (5认同)
  • +基兰是对的.最大数量与答案中的最大数量不同.见[here](http://dev.mysql.com/doc/refman/5.0/en/integer-types.html) (2认同)

Pro*_*ter 37

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

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

的定义int(2)没有指定ZEROFILL将:

  • 仍然接受一个值 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;
Run Code Online (Sandbox Code Playgroud)

这将输出:

+----+-------+-------+------------+-------+
| id | int1  | int2  | zf1        | zf2   |
+----+-------+-------+------------+-------+
|  1 | 10000 | 10000 | 0000010000 | 10000 |
|  2 |   100 |   100 | 0000000100 |   100 |
+----+-------+-------+------------+-------+
Run Code Online (Sandbox Code Playgroud)

请注意,即使长度较大,(11)列的显示宽度int(2)也要小得多.

这个答案是针对Linux的MySQL 5.7.12进行测试的,对于其他实现可能会有所不同.

  • "注意int1列的显示宽度比zerofill2小得多,即使长度更大"......嗯,这只是因为列名'zerofill2'是9个字符长而'int1'是4个. (5认同)
  • ...是的,所以很明显长度没有效果,即使在未启用zerofill时显示宽度也是如此.否则int1会宽得多,宽度为10个字符. (2认同)
  • 一个很好的解释与一个坚实的例子.比接受的方式更好的答案.谢谢@Programster. (2认同)

ks1*_*322 32

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

(11)- int数据类型的此属性与列的大小无关.它只是整数数据类型的显示宽度.从11.1.4.5开始.数字类型属性:

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


sha*_*009 19

对此的一个很好的解释可以在这里 找到

总结:int(N)中的数字N经常被列允许的最大大小所混淆,就像在varchar(N)的情况下那样.

但是这不是Integer数据类型的情况 - 括号中的数字N不是列的最大大小,而只是一个参数来告诉MySQL在通过MySQL查看表的数据时显示列的宽度console(当您使用ZEROFILL属性时).

括号中的数字将告诉MySQL有多少个零来填充传入的整数.例如:如果您在设置为INT(5)的列上使用ZEROFILL并且插入了数字78,则MySQL将使用零填充该值,直到该数字满足括号中的数字.即78将成为00078,127将成为00127.总结:括号中的数字用于显示目的.
在某种程度上,除非您使用ZEROFILL属性,否则括号中的数字是无用的.

因此,大小为INT将保持相同即-2147483648到2147483648的签署0至4294967295无符号(〜2.15亿和4.2亿,这是为什么开发商仍然不知道在括号后面的数字N的故事的原因之一,因为它几乎不影响数据库,除非它包含超过2亿个行),并且就字节而言,它将是4个字节.

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


MER*_*MER 10

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

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

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

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


Sac*_*wal 8

在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