目录
数据类型分类
MYSQL中,常见的数据类型如下表所示:

数值类型
常见的几个数值类型的字节数和范围如下所示:

tinyint
这里以tinyint为例,插入数值类型时,插入的数据必须在对应的范围内,如果在MYSQL中插入不合法的数据,MYSQL一般都会直接拦截,如下所示:

所以,在MYSQL中,数据类型本身也是一种约束,这种约束主要是为了让使用者尽可能进行正确的插入,有了这种约束,就能保证数据库中的数据是可预期的,并且是完整的。
bit
在MYSQL中,也支持比特位类型,默认值为1,范围为1-64。如下所示:

小数类型
float
float的语法如下:
float[(m,d)] [unsigned] : M指定显示长度,d指定小数点位数,占用空间4个字节
示例如下:

如果传入的小数精度比定义的要多,MYSQL会进行四舍五入的方式进行存储,如下所示:

但即便如此,四舍五入后的结构也不能超过范围,否组会被拦截。
decimal
当数据较大时,float类型可能就无法准确存储了,会存在精度方面的损失。这是可以用decimal来存储数据,语法如下:
decimal(m, d) [unsigned] : 定点数m指定长度,d表示小数点的位数
使用与float类似,只不过float表示的精度大约是7位,decimal整数最大位数m为65,支持小数最大位数d是30,,如果d被省略,默认为0;如果m被省略,默认是10。如果希望小数精度高,使用decimal。
字符串类型
char
char的语法如下:
char(L): 固定长度字符串,L是可以存储的长度,单位为字符,最大长度值可以为255
char为固定长度字符串,无论用多少都会分配L空间的大小。
varchar
varchar为变长字符串,语法如下:
varchar(L): 可变长度字符串,L表示字符长度,最大长度65535个字节
这里的L为上限,用多少给多少,但是有1-3个字节用于记录数据大小,所有说有效字节数为65532。
当表的编码为utf8时,varchar(n)参数n的最大值是65532/3=21844(因为utf8中,一个字符占用3个字节),如果编码是gbk,varchar(n)参数n的最大值是65532/2=32766(因为gbk中,一个字符占用2字节)。同时,MYSQL对一行存储的数据大小也有要求,因此,实际存储的时候,若一行内还有其它列,这个存储的最大上限还要小一点。
日期和时间类型
常用的日期有如下几个:
date:日期'yyyy-mm-dd',占用三个字节
datetime:时间日期格式,'yyyy-mm-dd HH:ii:ss'表示范围从1000到9999,占用八字节
timestamp:时间戳,从1970年开始的yyyy-mm-dd HH:ii:ss格式和datetime完全一致,占用四个字节,该字段可自动更新,但是要加上default current_timestamp字段。
enum和set类型
enum提供了若干个选项的值,但是在最终的单元格中,实际只存储了其中一个值,而且处于效率考虑,这些值实际存储的是"数字";set类型与enum类似,只不过在最终的单元格中可以存储其中任意多个值。如下所示:

enum即可以写对应的数据,也可以写对应的下标,这个下标从1开始;set集合也可以传入对应的数字,只不过会将数字转换成对应的二进制,从低位到高位分别对应的定义set的几个选项,若对应的二进制位为1则插入数据库中,如下所示:

若要在set类型中插入多个选项,可以用逗号分隔,如下所示:

enum类型可以根据数据来查,也可以根据下标来查;set类型查找时可以使用find_in_set函数,这个函数只能查一个元素是否在对应的集合中,如下所示:

若要在表中将含有某一数据的行筛选出来,也可使用该函数,如下所示:

