整数类型

类型存储空间无符号数范围有符号数范围含义
TINYINT1字节0 ~ 2^8 - 1-2^7 ~ 2^7 - 1非常小的整数
SMALLINT2字节0 ~ 2^16 - 1-2^15 ~ 2^15 - 1小的整数
MEDIUMINT3字节0 ~ 2^24 - 1-2^23 ~ 2^23 - 1中等的整数
INT(别名INTEGER)4字节0 ~ 2^32 - 1-2^31 ~ 2^31 - 1标准的整数
BIGINT8字节0 ~ 2^64 - 1-2^63 ~ 2^63 - 1大整数

在数据类型后面加上UNSIGNED表示该类型为无符号数,比如TINYINT UNSIGNED,不加或加SIGNED表示有符号数,比如TINYINTTINYINT SIGNED

浮点数类型

类型存储空间绝对值最小非0值绝对值最大值含义
FLOAT4字节±1.175494351E-38±3.402823466E+38单精度浮点数
DOUBLE8字节±2.2250738585072014E-308±1.7976931348623157E+308双精度浮点数

所谓浮点数,指的是小数点位置不固定。浮点数在计算机中的表示方式为底数+指数,这两部分都是以整数形式存储。在有限的比特位数下,如果想要精度高,则底数占的位数要高,如果想要表示范围大,则指数占的位数要高,浮点数指的是这两部分所占大小不固定,相当于小数点位置不固定,以兼顾范围和精度。

MySQL还支持FLOAT(M,D)DOUBLE(M,D)的形式表示浮点数,但这种方式在新版本中不再推荐使用。同样,在FLOATDOUBLE后面加UNSIGNED以拒绝存储负数的做法也不再被推荐。

定点数类型

类型存储空间取值范围
DECIMAL(M, D)取决于M和D取决于M和D

所谓定点数是指将十进制数用小数点分隔开来,用两个整数来表示小数点左右的两部分,这种方式可以保证存储的小数一定是精确的。

M表示总的十进制位置,D表示小数部分的十进制位置,比如DECIMAL(16,4)表示一共有16个十进制位,其中小数部分占用4位,整数部分占用12位。

日期和时间类型

类型存储空间取值范围含义
YEAR1字节1901 ~ 2155年份值
DATE3字节'1000-01-01' ~ '9999-12-31'日期值
TIME3字节'-838:59:59' ~ '838:59:59'时间值
DATETIME8字节'1000-01-01 00:00:00' ~ '9999-12-31 23:59:59'日期和时间
TIMESTAMP4字节'1970-01-01 00:00:01' ~ '2038-01-19 03:14:07'时间戳

MySQL5.6.4之后,TIMEDATETIMETIMESTAMP添加了对毫秒的支持,格式是数据类型(小数秒位数),小数秒位数最多支持6位,也就是精确到微秒。

TIME类型除了可以表示一个时间点,还可以表示一个时间段,所以可以为负数,小时部分也可以超过24。

TIMESTAMP和UTC时间对应,本身是绝对的,但是加上时区后就有不同的表示。

字符串类型

类型最大长度存储空间含义
CHAR(M)M个字符M*W字节固定长度的字符串
VARCHAR(M)M个字符L+1或L+2字节可变长度的字符串
TINYTEXT2^8 - 1字节L+1字节非常小型的字符串
TEXT2^16 - 1字节L+2字节小型的字符串
MEDIUMTEXT2^24 - 1字节L+3字节中等大小的字符串
LONGTEXT2^32 - 1字节L+4字节大型的字符串

M表示该数据类型能存储的字符数量(注意不是字节数量),W表示单个字符在特定字符集编码下最多需要的字节数,L表示存入的变长字符串在特定字符集下的实际字节数。

VARCHAR及TEXT系列用于不定长字符串,它们都采用了“长度+内容”的表示方式,所以除了实际字节数L外,长度也要占用存储空间。

VARCHAR受MySQL单行数据长度的限制,不能超过65535,但TEXT系列不受此限制。

ENUM类型和SET类型

ENUM('str1', 'str2', 'str3' ...)
SET('str1', 'str2', 'str3' ...)

ENUM表示该列的值只能从给定的字符串列表中选择一个,SET表示可以选择多个,比如性别只能选男女,但兴趣爱好可以有多个。

二进制类型

BIT类型

类型存储空间含义
BIT(M)近似为(M+7)/8存储M个二进制位的值

M的取值范围为1~64,默认为1。

BINARY(M)与VARBINARY(M)

对应CHAR(M)T VARCHAR(M),用于存储原始字节。

BLOB类型

包括TINYBLOB、BLOB、MEDIUMBLOG、LONGBLOB,用于存储可变长度的二进制数据,比如图片、音频、压缩文件之类的。


对于比较大的二进制数据,比如图片、音频、文件之类的,一般都不直接存数据库,而是保存到文件系统中,然后只在数据库中存储一个路径。






  • 无标签