数据类型

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