首页 文章

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

提问于
浏览
411

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

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

11 回答

  • 121

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

    • TINYINT = 1个字节(8位)

    • SMALLINT = 2个字节(16位)

    • MEDIUMINT = 3个字节(24位)

    • INT = 4个字节(32位)

    • BIGINT = 8个字节(64位) .

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

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

  • 31

    INT(somenumber)会产生差异 only in term of display ,即以“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 .

  • 10

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

  • 0

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

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

    int(2)no zerofill specified 的定义将:

    • 仍然接受 100 的值
      输出时

    • 仍为 100 100 的值(不是 000

    • display width 将是从select查询输出的最大值的宽度 .

    (2) 唯一能做的就是 if zerofill is also specified

    • 1 的值将显示 01 .

    • 显示值时,该列将始终具有 width of the maximum possible value the column could take (整数的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

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

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

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

  • 99

    可以找到一个很好的解释here

    总结:int(N)中的数字N通常与列允许的最大大小相混淆,就像varchar(N)的情况一样 .

    但是这不是Integer数据类型的情况 - the number N in the parentheses is not the maximum size for the column, but simply a parameter to tell MySQL what width to display the column at when the table's data is being viewed via the MySQL console (when you're using the ZEROFILL attribute).

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

    所以int的大小将保持不变,即 -2147483648 to 2147483648 for signed0 to 4294967295 for unsigned (~215亿和4.2亿,这是开发人员仍然不知道括号中数字N背后的故事的原因之一,因为它几乎不影响数据库,除非它包含超过2亿个行),并且就字节而言,它将是 4 bytes .

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

  • -9

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

    • MySQL中整数数据类型后面的(n)指定显示宽度

    • 显示宽度不限制查询返回的数字的长度

    • 显示宽度DOES限制为零填充列填充的零的数量,因此总数与显示宽度匹配(只要实际数字不超过显示宽度,在这种情况下数字显示为)

    • 显示宽度也是一个有用的工具,供开发人员知道应该填充的值的长度

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

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

  • 5

    在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

  • 580

    据此book

    MySQL允许您为整数类型指定“宽度”,例如INT(11) . 这对于大多数应用程序来说毫无意义:它不限制值的合法范围,而只是指定MySQL的交互式工具为显示目的而保留的字符数 . 出于存储和计算目的,INT(1)与INT(20)相同 .

  • 29

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

  • 15

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

相关问题