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

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


当前回答

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

其他回答

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

带符号的值是-2的32-1次方到0到2的32-1次方-1 = -2147483648到0到2147483647

无符号值是:0到2^32-1 = 0 ~ 4294967295

根据这里,int(11)将占用4个字节的空间,即2^(31)= 2147483648 max值和-2147483648min值的32位空间。一位是符号。

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

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

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

int(2)不指定零填充的定义:

仍然接受100的值 输出时仍然显示值100(不是0或00) 显示宽度将是选择查询输出的最大值的宽度。

(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)是相同的。