文章目录
- 数据类型分类
- 数值类型
- 越界访问
- bit类型
- 小数类型
- float
- decimal
- 字符串类型
- char
- varchar
- 日期
- enum和set
数据类型分类
在MySQL数据库中,存在各种各样的数据类型:
针对于上述的这么多类型,本篇就对于这些类型的数据进行一一解释,并解释其当中的特性
数值类型
以上展示的是在MySQL中的数值类型以及对应的最大最小值,从中可以看出是和C语言有很多相似的地方的,那么接下来就设计一组越界测试来检验最大最小值
越界访问
普通越界访问
这里我创建了一个数据库,并尝试向tinyint中插入对应的数据,此时发现插入是失败的,这是因为超过了一个字节对应的最大存储值,换句话说MySQL并不允许插入一个不符合范围的数据
换句话说,MySQL中和C语言不一样,在C语言中如果使用的是超过接线的数字,最多是会提示一个告警的信息,在具体的处理中会有截断或者是隐式类型转换这样的操作,但是不管怎么说,终是可以容纳进去的,但是在MySQL中这样的操作是不合法,也是不可接受的
如果向MySQL中插入不合法的数据,那么MySQL会直接拦截,不让这样的操作继续向后执行,换句话说,如果有数据被成功插入MySQL当中了,那么就意味着这个数据一定是合法的
所以,MySQL的数据类型本身也是一种约束,这样就能保证数据库中的数据都是可预期,完整的数据,同时也会使得程序员必须要进行数据的正确插入,约束使用者
无符号和有符号数
bit类型
下面介绍的这种数据类型是bit类型,它表示的是位字段类型,其中可以指定这个类型中有多少个比特位,如果不设置默认是1个比特位:
由上面的现象可以得出一个结论,在bit位段进行显示的时候,会按照ASCII对应的值来进行显示,在未来,如果有需要的使用场景,填入的数据只有0或者1这两种可能,此时就可以插入一个bit位1的位段,那么表示的就是这个位置填入的数据不是0就是1,这样可以节省空间
从上述用例可以看出,这部分的内容也是遵守界限规则的
小数类型
float
对于float,在C语言中表示的是浮点数,而在MySQL语句中略有不同,在定义的时候要制定对应的显示长度,小数位数,float类型占用空间是4个字节
以上述的float类型的数据范围是4, 2为例,它表示的意思是该浮点数显示的是4位,并且有效精度是2位,那么对于这个测试来说,它所能表示的范围就是-99.99到99.99,值得注意的是,这个是遵循四舍五入原则的,如果插入的是99.991,其实也是可以插入的,但是如果是99.995,就不可以了
无符号float
对于无符号的类型数据来说,其实就是把数据范围中的负数部分去掉了,只能选正数的部分
decimal
以上是对float的理解,那么下面介绍的数据类型是decimal
它定义的方法和float是一样的,但是区别是,它表示的精度和float并不相同:
从中看出,它们两个类型的区分之一就是精度不一样,这是由于float内部的存储模式决定的,float表示的精度最大是7位左右,而对应的decimal可以容纳的是65,小数最大是30位
所以,当需要使得小数的精度更高的时候,推荐使用的是decimal
字符串类型
char
从中可以看出的规律是,char(2)表示可以存放的是两个字符,可以是字母或者汉字,最长是255
varchar
看似它和char作用是一样的,那么具体的有什么不同点呢?
变长的意义就是,在不超过自定义范围的情况下,用多少开辟多少,而定长就是直接先都开辟好了
日期
常用的日期有三个
- date
- datetime
- timestamp
需要注意的是,t3表示的时间戳类型,它会自动在你插入数据打的时候进行更新,更新的就是当前的时间
enum和set
对于enum其实并不陌生,它表示的就是枚举,所以这里不再进行赘述,和c中的用法是一样的,这个设定提供了若干个选项的值,在最终的单元格中,只是存储了数字
那这个set表示的类型是集合的意思,就是提供了若干的选项,可以从中进行挑选等
find_in_set函数
这个函数从名字就能看出,它主要是为了在集合中查找元素而服务的,一般格式为
find_in_set(sub,str_list)
:如果这个sub在str_list当中,那么就返回下标,如果不存在就返回0