MySQL的字符集
为什么需要字符集?
计算机只能存储二进制,为了方便存储信息,我们对于不同的字符与二进制之间的对应维护了一套映射关系,这一套映射关系就称为“字符集”。将字符表示为二进制的过程叫做编码,将二进制解析为字符的过程叫解码。
常见的字符集
ASCII:一共收录128个字符,包括英文大小写和空格、标点符号等。可以用一个字节完成编码。ISO 8859-1:在ASCII基础上,新增了128个字符,用于表示德、法语言,依然可以用一个字节完成编码。GB2312:收录类型更加充分。兼容ASCII,如果字符是ASCII里的,用一个字节编码,否则用两个字节。GBK:在GB2312上扩展了一些。UTF-8:收录了凡是地球上所有能想到的字符,并且还在不断扩充。UTF-8是Unicode的一种编码方案,除了UTF-8外,还有UTF-16、UTF-32。UTF-8采用变长的编码方案,长度范围是1字节到4字节。
Q&A
1.在MySQL字段信息中,经常看到编码方式是utf8mb3、utf8mb4,这两种字符集和UTF-8有什么关系呢?
utf8mb3是采用1-3字节编码的UTF-8,utf8mb4是采用1-4字节编码的UTF-8.
为了节省空间,MySQL的设计者对UTF-8做了“阉割”,而utf8mb3正是UTF-8的“阉割版”,目前UTF-8默认指的就是utf8mb3。UTF-8使用1-4个字节完成编码,而utf8mb3使用1-3个字节完成编码。而utf8mb4则是正规的UTF-8,使用1-4字节变长编码。在需要使用emjoy表情的场景中,还是需要选择utf8mb4。
2.字符集utf8mb4_unicode_ci后的_ci表示什么意思?
在比较时不区分大小写。
除了_ci之外,还有如下的后缀:
| 后缀 | 代表的含义 |
|---|---|
_ai | 不区分重音 |
_as | 区分重音 |
-ci | 不区分大小写 |
_cs | 区分大小写 |
_bin | 以二进制进行比较 |
可以使用SHOW COLLATION LIKE 'utf8\_%'查看某一字符集的比较规则,DEFAULT列为YES代表的就是默认的。