TINYINT
SMALLINT
MEDIUMINT
INT
INTEGER
BIGINT
在数据类型后面加上UNSIGNED表示该类型为无符号数,比如TINYINT UNSIGNED,不加或加SIGNED表示有符号数,比如TINYINT或TINYINT SIGNED。
UNSIGNED
TINYINT UNSIGNED
SIGNED
TINYINT SIGNED
FLOAT
DOUBLE
所谓浮点数,指的是小数点位置不固定。浮点数在计算机中的表示方式为底数+指数,这两部分都是以整数形式存储。在有限的比特位数下,如果想要精度高,则底数占的位数要高,如果想要表示范围大,则指数占的位数要高,浮点数指的是这两部分所占大小不固定,相当于小数点位置不固定,以兼顾范围和精度。
MySQL还支持FLOAT(M,D)和DOUBLE(M,D)的形式表示浮点数,但这种方式在新版本中不再推荐使用。同样,在FLOAT和DOUBLE后面加UNSIGNED以拒绝存储负数的做法也不再被推荐。
FLOAT(M,D)
DOUBLE(M,D)
DECIMAL(M, D)
所谓定点数是指将十进制数用小数点分隔开来,用两个整数来表示小数点左右的两部分,这种方式可以保证存储的小数一定是精确的。
M表示总的十进制位置,D表示小数部分的十进制位置,比如DECIMAL(16,4)表示一共有16个十进制位,其中小数部分占用4位,整数部分占用12位。
YEAR
DATE
TIME
DATETIME
TIMESTAMP
MySQL5.6.4之后,TIME、DATETIME、TIMESTAMP添加了对毫秒的支持,格式是数据类型(小数秒位数),小数秒位数最多支持6位,也就是精确到微秒。
数据类型(小数秒位数)
TIME类型除了可以表示一个时间点,还可以表示一个时间段,所以可以为负数,小时部分也可以超过24。
TIMESTAMP和UTC时间对应,本身是绝对的,但是加上时区后就有不同的表示。
CHAR(M)
VARCHAR(M)
TINYTEXT
TEXT
MEDIUMTEXT
LONGTEXT
M表示该数据类型能存储的字符数量(注意不是字节数量),W表示单个字符在特定字符集编码下最多需要的字节数,L表示存入的变长字符串在特定字符集下的实际字节数。
VARCHAR及TEXT系列用于不定长字符串,它们都采用了“长度+内容”的表示方式,所以除了实际字节数L外,长度也要占用存储空间。
VARCHAR受MySQL单行数据长度的限制,不能超过65535,但TEXT系列不受此限制。
ENUM('str1', 'str2', 'str3' ...) SET('str1', 'str2', 'str3' ...)
ENUM表示该列的值只能从给定的字符串列表中选择一个,SET表示可以选择多个,比如性别只能选男女,但兴趣爱好可以有多个。
M的取值范围为1~64,默认为1。
对应CHAR(M)T VARCHAR(M),用于存储原始字节。
包括TINYBLOB、BLOB、MEDIUMBLOG、LONGBLOB,用于存储可变长度的二进制数据,比如图片、音频、压缩文件之类的。
对于比较大的二进制数据,比如图片、音频、文件之类的,一般都不直接存数据库,而是保存到文件系统中,然后只在数据库中存储一个路径。