mysql查漏补缺2

  1. 编码、解码

计算机硬盘中只能存储二进制,那么怎么来存储字符串呢?答案是通过建立二进制与字符串的映射关系。那么如何映射呢?需要一个约定的集合来充当中介,这就是字符集。

将字符映射成二进制数据叫做编码,将二进制数据映射为字符的过程叫做解码。

常用的字符集有比如ASCII,ASCII使用一个字节编码,共收录128个字符,包括空格、标点符号、数字、大小写字母和一些不可见字符。例如'L' -> 01001100,十六进制:0x4C

最通用的字符集为utf-8,收录地球上能想到的所有字符。采用变长编码方式,编码一个字符需要使用1~4个字节。例如:'L' -> 01001100(十六进制:0x4C) '啊' -> 111001011001010110001010(十六进制:0xE5958A)

  1. MySQL中的utf8和utf8mb4

utf-8使用1-4个字节,但是一般常用的字符1-3个字节就足够了,考虑到读写效率,于是MySQL自己擅作主张地将自己的utf8字符集改为1-3个字节。这样可能导致一些问题,比如emoji表情读写失败。utf8mb4才是正统的使用1-4个字节存储数据的字符集,所以一般在建库时,都会选择utf8mb4。

  1. 比较规则

如何比较两个字符的大小?我们需要比较规则。如何制定比较规则才是合理的呢?最简单的想法是:使用字符相对应的二进制数来比较。比方说字符'a'的编码为0x01,字符'b'的编码为0x02,所以'a'小于'b'。

但很多时候这么简单的比较规则无法满足需求,那么更加多样、复杂的比较规则就应运而生了。就拿最常见的utf8_general_ci来说吧,utf8代表所应用的字符集,general表示通用的,其他还有例如spanish,则代表更适合西班牙语字符。ci代表不区分大小写,其他还有例如cs,代表区分大小写。

比较规则大多用于排序,如果在对字符串作排序后得到了意想不到的结果,需要考虑一下是不是比较规则的设置上出现了问题。

你可能感兴趣的:(mysql查漏补缺2)