MySQL 字段类型占用空间
MySQL支持多种列类型:数值类型、日期/时间类型和字符串(字符)类型。
首先来看下各类型的存储需求(即占用空间大小):
数值类型存储需求
| 列类型 | 存储需求 |
|---|---|
| TINYINT | 1个字节 |
| SMALLINT | 2个字节 |
| MEDIUMINT | 3个字节 |
| INT, INTEGER | 4个字节 |
| BIGINT | 8个字节 |
| FLOAT(p) | 如果0 <= p <= 24为4个字节, 如果25 <= p <= 53为8个字节 |
| FLOAT | 4个字节 |
| DOUBLE [PRECISION], item REAL | 4个字节 |
| DECIMAL(M,D), NUMERIC(M,D) | 变长(0-4个字节) |
| BIT(M) | 大约(M+7)/8个字节 |
int(10)这里的10指的是数值的宽度,并不是字节
日期和时间类型的存储需求
| 列类型 | 存储需求 |
|---|---|
| DATE | 3个字节 |
| DATETIME | 8个字节 |
| TIMESTAMP | 4个字节 |
| TIME | 3个字节 |
| YEAR | 1个字节 |
字符串类型的存储需求
| 列类型 | 存储需求 |
|---|---|
| CHAR(M) | M个字节,0 <= M <= 255 |
| VARCHAR(M) | L+1个字节,其中L <= M 且0 <= M <= 65535 |
| BINARY(M) | M个字节,0 <= M <= 255 |
| VARBINARY(M) | L+1个字节,其中L <= M 且0 <= M <= 255 |
| TINYBLOB, TINYTEXT | L+1个字节,其中L < 28 |
| BLOB, TEXT | L+2个字节,其中L < 216 |
| MEDIUMBLOB, MEDIUMTEXT | L+3个字节,其中L < 224 |
| LONGBLOB, LONGTEXT | L+4个字节,其中L < 232 |
| ENUM(‘value1’,’value2’,…) | 1或2个字节,取决于枚举值的个数(最多65,535个值) |
| SET(‘value1’,’value2’,…) | 1、2、3、4或者8个字节,取决于set成员的数目(最多64个成员) |
上表的M只是为了说明占用空间大小,在实际创建表中char(20)、varchar(20),20指的是字符而不是字节(4.0版本以上,以下指的是字节);那么字符和字节的转换要看字符集,utf-8下,1字符=3字节;gbk下,1字符=2字节。
接下来会剖析varchar最大长度和text占用空间问题。
参考来源:https://blog.csdn.net/free_ant/article/details/52936722

浙公网安备 33010602011771号