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

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


当前回答

不管指定的长度是多少,INT总是4个字节。

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

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

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

其他回答

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

不管指定的长度是多少,INT总是4个字节。

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

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

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

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

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

很多答案都说(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)的大小为4字节,等于32位。

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

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