一、前言
掌握 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 会影响占用的存储空间。