IE盒子

搜索
查看: 130|回复: 1

[mysql]为什么mysql存储引擎处理Binary类型的数据比char型 ...

[复制链接]

2

主题

2

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2022-9-22 10:40:13 | 显示全部楼层 |阅读模式
1 字符和字节的关系

字符的底层存储逻辑就是字节(二进制串),但是如何用二进制表示一个字符(最基本就是用多少个字节表示一个字符),比如ASCII下,一个字节就可以表示一个字符,这个时候mysql处理字符和字节的速度差不多,但是如果需要存储中文,则使用的编码格式是GBK,这种编码要求两个字节表示一个汉字;
一般的开发中,是既有英文字符也有中文字符,甚至还有表情字符,所以为了兼容性,一般采用UTF-8字符集,这种是可边长字符集,有的字符是一个字节,有的字符是2个,3个甚至4字节表示。
2 为什么mysql存储引擎处理Binary类型的数据比char型更快?

既然字符是由字节表示的,而且字节是计算机底层能够直接处理的,所以我们这样想,计算机底层想要认识这个字符,必须根据一定的规则来截取1个或者几个字节,相当于处理上多了一步逻辑判断,所以理所当然的mysql处理Binary类型比char型更快。

在比较方面:
mysql处理Binary字符串时,每次只取出一个字节,并且根据字节表示的数值进行比较,但是对于char型的数据,它是要一个bit一个bit的比较(不同的字符集规则,其bit位上的特征不同),因为其首先要根据字节中的开头的几个bit确定所用的字符集编码格式是否相同,然后再对存储编码信息的位进行比较。
比如:对字符 "a"采用ASCII编码时,其二进制串是 1000 0001, 而a在UTF-8编码集中的二进制串是 0xc3a1(0x表明这是16进制位),因为这是两种不同的编码格式,所以需要进行格式判断和转换才能比较,这必然耗费多余的性能,因为采用Binary存储时,所有的字符都只有一种存储格式,没有多余的判断和转换。
回复

使用道具 举报

0

主题

6

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 3 天前 | 显示全部楼层
不错 支持一个了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表