数据类型

一.数值类型
1.整数

1.tinyint

正常插入

越界插入

如果我们向mysql特定的类型中插入不合法的数据,MySQL一般都是直接拦截我们,不让我们做对应的操作!



2.bit类型
bit[(M)] : 位字段类型。M表示每个值的位数,范围从1到64。如果M被忽略,默认为1。

这是因为bit字段在显示时,是按照ASCII码对应的值显示。

如果我们有这样的值,只存放0或1,这时可以定义bit(1)。这样可以节省空间。
2.浮点类型
1.float
float[(m, d)] [unsigned] : M指定显示长度,d指定小数位数,占用空间4个字节。
例子
小数:float(4,2)表示的范围是-99.99 ~ 99.99,MySQL在保存值时会进行四舍五入。

注意:float取无符号就是去掉负数。
2.decimal
decimal(m, d) [unsigned] : 定点数m指定长度,d表示小数点的位数。
decimal(5,2) 表示的范围是 -999.99 ~ 999.99。
decimal(5,2) unsigned 表示的范围 0 ~ 999.99。
decimal和float很像,但是有区别:float和decimal表示的精度不一样。

可以看到decimal其实更加准确,float表示的精度大约是7位。
decimal整数最大位数m为65。支持小数最大位数d是30。如果d被省略,默认为0.如果m被省略,默认是10。
二.字符串类型
1.char类型
char(L): 固定长度字符串,L是可以存储的长度,单位为字符,最大长度值可以为255。


在UTF8里虽然一个汉字是3个字节,但在mysql里仍被解释为一个字符。
2.varchar类型
varchar(L): 可变长度字符串,L表示字符长度,最大长度65535个字节。

说明:
关于varchar(len),len到底是多大,这个len值,和表的编码密切相关(注意len代表的是上限,并非一定开len个空间):
1.varchar长度可以指定为0到65535之间的值,但是有1 - 3 个字节用于记录数据大小,所以说有效字节数是65532。
2.当我们的表的编码是utf8时,varchar(n)的参数n最大值是65532/3=21844[因为utf中,一个字符占用3个字节,如果编码是gbk,varchar(n)的参数n最大是65532/2=32766(因为gbk中,一个字符占用2字节)。
3.char和varchar的区别

4.日期和时间类型


可以发现t3我们根本没有进行插入,但它自动生成了,也就是说时间戳是自动生成的。
5.enum和set

简而言之enum相当于单选,set相当于多选。
一般使用

枚举类型不仅可以写枚举常量,也可以写它的下标。

同样set也能用数字表示,但是它是按照比特位表示的。例如0001->登山,0010->游泳,0011->登山,游泳。

三.集合查询
按性别筛选

如果我们要筛选爱好里有武术的怎么做呢?这就需要find_ in_ set函数了。它会查找含有该子集的集合。
find_in_set(sub,str_list) :如果 sub 在 str_list 中,则返回下标;如果不在,返回0;str_list 用逗号分隔的字符串。

如果要求爱好里有登山和游泳呢?
