mysql的bit数组( bit(n) )类型解析
2021/7/28 19:36:36
本文主要是介绍mysql的bit数组( bit(n) )类型解析,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
先明确:bit 类型不是对应true和false,也不是只有一位
在网上能查到的比较多的关于bit的,只有单纯的bit位,而关于bit数组类型则比较少,由于工作需要,对bit数组进行了一些研究。
bit类型在mysql的情况
创建两张表:
a表为1个bit位 b表为1个64长度的bit数组位 mysql> create table a(w bit); mysql> create table b(w bit(64)); 查看a表、b表结构 mysql> desc a; +-------+--------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+--------+------+-----+---------+-------+ | w | bit(1) | YES | | NULL | | +-------+--------+------+-----+---------+-------+ 1 row in set (0.00 sec) mysql> desc b; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | w | bit(64) | YES | | NULL | | +-------+---------+------+-----+---------+-------+ 1 row in set (0.00 sec)
可以看出,bit类型也会自动被mysql认作是bit数组类型,不过长度为1。
bit类型的存储情况
在a表和b表中同一插入5个值 0 1 NULL ‘0’ ‘1’
在a表和b表中查看:
mysql> select w,bin(w) from a; +------+--------+ | w | bin(w) | +------+--------+ | | 0 | | | 1 | | NULL | NULL | | | 1 | | | 1 | +------+--------+ 5 rows in set (0.00 sec) mysql> select w,bin(w) from b; +----------+--------+ | w | bin(w) | +----------+--------+ | | 0 | | | 1 | | NULL | NULL | | 0 | 110000 | | 1 | 110001 | +----------+--------+ 5 rows in set (0.00 sec)
发现以下几个特点:
- 直接查看值是没有显示的,因为1和0的ascll码的值没有显示。
- null值同样会被标记为null。
- 插入字符‘0’和‘1’时,实际上插入的是对应的ascll值的二进制。
- 对于位数不够的a表来说,会对值的位数进行截取。
bit的查询情况
由于a表的存储情况不全,对b表进行查询。
试验情况如下:
//整数------------------------------------------- mysql> select w,bin(w) from b where w=0; +----------+--------+ | w | bin(w) | +----------+--------+ | | 0 | +----------+--------+ 1 row in set (0.00 sec) mysql> select w,bin(w) from b where w=1; +----------+--------+ | w | bin(w) | +----------+--------+ | | 1 | +----------+--------+ 1 row in set (0.00 sec) mysql> select w,bin(w) from b where w = 48; +----------+--------+ | w | bin(w) | +----------+--------+ | 0 | 110000 | +----------+--------+ 1 row in set (0.00 sec) //实数--------------------------------------------- mysql> select w,bin(w) from b where w =0.0; +----------+--------+ | w | bin(w) | +----------+--------+ | | 0 | +----------+--------+ 1 row in set (0.00 sec) mysql> select w,bin(w) from b where w =0.5; Empty set (0.00 sec) //null值------------------------------------------ mysql> select w,bin(w) from b where w is null; +------+--------+ | w | bin(w) | +------+--------+ | NULL | NULL | +------+--------+ 1 row in set (0.00 sec) //字符串------------------------------------------- mysql> select w,bin(w) from b where w='0'; +----------+--------+ | w | bin(w) | +----------+--------+ | | 0 | +----------+--------+ 1 row in set (0.00 sec) mysql> select w,bin(w) from b where w ='0.5'; Empty set (0.00 sec) mysql> select w,bin(w) from b where w ='48dsafgfgda'; +----------+--------+ | w | bin(w) | +----------+--------+ | 0 | 110000 | +----------+--------+ 1 row in set, 1 warning (0.00 sec) mysql> select w,bin(w) from b where w ='dsad'; +----------+--------+ | w | bin(w) | +----------+--------+ | | 0 | +----------+--------+ 1 row in set, 1 warning (0.00 sec)
发现以下几个特点:
- 对于整数,bit类型会转换成对应的整数进行判断。
- 对于null值,bit类型依然是等于null值
- 对于实数,bit类型会转换成对应的整数,再转换为实数进行判断,所以w=0有结果,而w=0.5没有结果
- 对于字符串,bit类型会转换成对应的整数,再转换为实数。而字符串会转换成对应的实数。这里字符串不会转为ascll码,而是将最开始的值转化为数字,比如‘0’转化为0,‘0.5dsa’转化成0.5,‘asd5’转化成0,所以会出现bit类型 0 等于‘abc’,'dsa545dsad','0dsad',...等等字符串的情况。
这里提一下mysql的字符串转化成实数流程:
---> 字符串s
--->匹配正则表达式 `^[+-]?\d+(\.\d*)?`,获取开头的实数
总结
bit数组类型应该作为整数类型来看,bit数组会存储整数的二进制表示,绝不是只有只能存储1位的情况。另外,对于bit类型的比较类型判断来说,还需要注意,因为char来型的缘故,所以在查询上bit=0和bit='0'其实是一样的,但是在存储上,bit存0和bit存‘0’却完全不同。
这篇关于mysql的bit数组( bit(n) )类型解析的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-04部署MySQL集群项目实战:新手入门教程
- 2024-11-04如何部署MySQL集群资料:新手入门指南
- 2024-11-02MySQL集群项目实战:新手入门指南
- 2024-11-02初学者指南:部署MySQL集群资料
- 2024-11-01部署MySQL集群教程:新手入门指南
- 2024-11-01如何部署MySQL集群:新手入门教程
- 2024-11-01部署MySQL集群学习:新手入门教程
- 2024-11-01部署MySQL集群入门:新手必读指南
- 2024-10-23BinLog入门:新手必读的MySQL二进制日志指南
- 2024-10-23Binlog入门:MySQL数据库的日志管理指南