前面的话:
第一次写工作随笔,目的是为了方便自己日后的复习和查询,会或多或少有缺陷,希望大家能指出错误,一同进步。
原因:
上家公司做抽奖项目时需要读取用户的呢称,当时做完功能后发现昵称出现乱码,当时是改变数据库编码格式解决了这个问题,但是对数据库字符集和校对规则了解不够深切,现对次总结下。
字符集和校对规则
- 字符集指的是从二进制编码转换成某种语言的对应关系,校对规则指的是字符集的排序方式,在MySql中 Utf-8是我们常用的字符集,此外还有GBK,ISO-8859-1 等字符集。其常用的校对规则如下:
- utf8_general_ci :utf-8常用的校对规则不支持扩展,只能在字符中逐个对比,因此速度会较快。
- utf8_unicode_ci :根据Unicode校对算法执行,特点是支持扩展,即可以把一个字母看作与其他字母组合相等。
- utf8_bin : 将字符串每个字符用二进制数据编译存储,区分大小写,可以存储二进制的内容。
通常情况下utf8_general_ci 足够满足我们日常需求
但是遇到比如存储emojo的需求就需要改变字符集,使用UTF8MB4字符集,校对规则选用utf8mb4bin(使用utf8_general_ci校对规则的话可能导致某些emojo表情无法识别),UTF8MB4是数据库版本5.5.3之后新增的编码集,用来存储4字节的Unicode。它是UTF8的超集,除了将编码改为UTF8MB4外不需要做其他变化,为了兼容性,建议使用UTF8MB4编码