1. MySQL 中 TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT 的存储空间与方言特性?
请说明 MySQL 中 TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT 这五种整数类型各自的存储字节数、取值范围,以及它们在 MySQL 官方语法中的方言特性(如显示宽度)?
- 各整数类型的存储字节数与取值范围
- MySQL 的显示宽度(display width)特性
- 有符号与无符号的区别
MySQL 的整数类型按存储字节数划分:TINYINT 占 1 字节(-128 到 127),SMALLINT 占 2 字节(-32768 到 32767),MEDIUMINT 占 3 字节(约 ±8388607),INT 占 4 字节(约 ±21 亿),BIGINT 占 8 字节(约 ±922 亿亿)。可使用 UNSIGNED 修饰符使范围变为非负;例如 TINYINT(1) 常用于模拟布尔值。MySQL 8.0 之前的 INT(11) 中的 11 是显示宽度(zerofill 时影响填充),不影响存储范围,MySQL 8.0 已废弃该显示宽度特性。
选择整数类型本质是"范围 vs 存储空间"的权衡:能容纳业务数据的最小类型最节省空间,但也要预估未来增长。INT 是默认推荐,BIGINT 用于自增主键或超大数值。
CREATE TABLE int_test (
a TINYINT, -- 1 字节
b SMALLINT, -- 2 字节
c MEDIUMINT, -- 3 字节
d INT, -- 4 字节
e BIGINT -- 8 字节
);