MySQL整数类型INT(5)和INT(11)的区别
MySQL 支持 SQL 标准整数类型 INTEGER(或 INT)和 SMALLINT。作为标准的扩展,MySQL 还支持 TINYINT、MEDIUMINT 和 BIGINT 整数类型。下表显示了每种整数类型所需的存储空间和范围。
类型 | 存储 (Bytes) | 最小值(有符号) | 最小值(无符号) | 最大值(有符号) | 最大值(无符号) |
---|---|---|---|---|---|
TINYINT | 1 | -128 | 0 | 127 | 255 |
SMALLINT | 2 | -32768 | 0 | 32767 | 65535 |
MEDIUMINT | 3 | -8388608 | 0 | 8388607 | 16777215 |
INT | 4 | -2147483648 | 0 | 2147483647 | 4294967295 |
BIGINT | 8 | -263 | 0 | 263-1 | 264-1 |
这些整数类型后面的数字表示最大显示宽度,并不影响实际存储范围。例如,INT(5) 和 INT(11) 的存储范围和大小完全一样,都是 -2147483648 ~ 2147483647,占 4 个字节。(5) 和 (11) 只是表示显示宽度,即 INT(5) 显示结果的最大宽度为 5 位,不足会用空格(默认)补齐;INT(11) 显示结果的最大宽度为 11 位。
下面通过一个具体的例子来说明。
首先,创建一张名为 tbl_integer
的数据表,包含两列 id_5
和 id_11
,数据类型均为整数类型,最大显示宽度分别为 5 和 11,并都设置成无符号且填充零(UNSIGNED ZEROFILL),即当数值位数未达到设置的显示宽度时,会在数值前面填充零直到满足设定的显示宽度。其中 id_5
列是主键,表的存储引擎为 InnoDB,字符集为 utf8mb4。
表 DDL 如下:1
2
3
4
5CREATE TABLE `tbl_integer` (
`id_5` int(5) unsigned zerofill NOT NULL,
`id_11` int(11) unsigned zerofill DEFAULT NULL,
PRIMARY KEY (`id_5`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
依次执行以下插入语句:1
2insert into tbl_integer values(12,12);
insert into tbl_integer values(123456,1234567890);
最后,执行以下查询语句:1
select * from tbl_integer;
返回结果如下:1
2
3
4
5
6
7
8+--------+-------------+
| id_5 | id_11 |
+--------+-------------+
| 00012 | 00000000012 |
| 123456 | 01234567890 |
+--------+-------------+
2 rows in set (0.00 sec)
可以看到,如果数字的位数少于指定的显示宽度,MySQL 会使用 0 来填充左侧以保持显示宽度一致。如在列 id_5
中,数字 12 会显示为 00012。
注:上述示例是在 MySQL CLI(即命令行界面)进行操作,部分 MySQL 客户端工具可能会自动去掉整数前面的 0,查询出来的结果不会显示左边的 0。
另外需要注意的是,显示宽度并不影响实际存储大小和性能。INT(5) 和 INT(11) 占用存储空间完全相同,处理速度也一样。
小结
INT(5) 和 INT(11) 之间的唯一区别是显示宽度的设置。这些设置只影响结果的显示,在存储和计算上没有任何实际变化。记住,INT 类型的取值范围与显示宽度无关,仍然是 -2,147,483,648 到 2,147,483,647。在选择使用哪种显示宽度时,可以根据实际需要和美观度进行选择。
以上简单介绍了 MySQL 中 INT(5) 和 INT(11) 的区别,希望可以帮助大家更好地使用 MySQL 的整数类型。
参考资料:
- MySQL Documentation: https://dev.mysql.com/doc/refman/8.0/en/integer-types.html
(END)