一、前言
掌握 MySQL 中各类型占用的存储空间,有助于帮我们计算数据表占用的空间,下面梳理了 MySQL 各类型占用的空间。
二、各类型占用空间
2.1、整数类型
| 类型 | 占用空间 | 范围 |
|---|---|---|
| TINYINT | 1 字节 | -128~127 |
| SMALLINT | 2字节 | -32768~32767 |
| MEDIUMINT | 3字节 | -8388608~8388607 |
| INT | 4字节 | -2147483648~2147483647 |
| BIGINT | 8字节 | -9223372036854775808~9223372036854775807 |
2.2、浮点数类型
| 类型 | 占用空间 | 范围 |
|---|---|---|
| FLOAT | 4字节 | ±1.175494351E-38~±3.402823466E+38 |
| DOUBLE | 8字节 | ±2.2250738585072014E-308~±1.7976931348623157E+308 |
2.3、定点数类型
| 类型 | 占用空间 | 备注 |
|---|---|---|
| DECIMAL | 通常占用4-16字节 | 根据定义的精度变化 |
字节根据精度变化关系如下
精度指的是 DECIMAL 总位数,包括整数位数和小数位数
举几个示例:
- DECIMAL(5,2) 占用4个字节
- DECIMAL(10,3) 占用8个字节
- DECIMAL(20,5) 占用16个字节
- 精度 ≤ 9,则固定占用 4 字节
- 精度 10-19,则固定占用 8 字节
- 精度 ≥ 20,则固定占用 16 字节
2.4、字符串类型
| 类型 | 占用空间 | 备注 |
|---|---|---|
| CHAR(M) | M 字节 | 每个字符占用1个字节 |
| VARCHAR(M) | M 字节 | 每个字符占用1个字节 |
| TEXT | 2的16次方(65,536)字节 | |
| MEDIUMTEXT | 2的24次方(16,777,216)字节 | |
| LONGTEXT | 2的32次方(4,294,967,296)字节 |
2.5、日期时间类型
| 类型 | 占用空间 |
|---|---|
| DATE | 3 字节 |
| TIME | 3 字节 |
| DATETIME | 3 字节 |
| TIMESTAMP | 3 字节 |
2.6、JSON 类型
每个JSON对象占用的空间与其包含的数据元素有关,一般会更大,可达GB级以上。
三、额外知识点
- int(M) 中的 M 只表示显示宽度,并不会影响占用的存储空间。如果 int(M) 配合 zerofill 使用,就会有 01、02、03 这种效果。char(M)、varchar(M) 的 M 会影响占用的存储空间。

image-20230714151754813

image-20230714151809822