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 字节。