字符集

MySQL使用较多的字符集就是utf8utf8mb4,了解一下这两者的区别。

utf8

utf8使用最多3个字节来表示一个字符,在5.5.3版本之前,MySQL只支持utf8字符集,在处理4个字节的unicode字符就会报错,例如emoji表情符号等。

utf8mb4

utf8mb4是指UTF-8 Most Bytes 4,utf8mb4使用最多4个字节来表示一个字符,这样就可以正常处理使用4个字节表示的unicode字符了,例如emoji表情的存储和查询。

总结

现在使用比较多的MySQL版本是5.78.0,都建议使用utf8mb4字符集,在utf8mb4字符集下,建议使用varchar类型来代替char类型,因为在utf8mb4下MySQL势必要为char类型保留更多的字节。

排序规则

在字符集之下,还要选择对应的排序规则,这个排序规则主要应用在字段的排序上。字符集为utf8mb4时,5.7的默认排序规则是utf8mb4_general_ci,8.0的默认排序规则是utf8mb4_0900_ai_ci,了解一下这两者的区别。

命名方式

这两种命名的规则不太一样,先看比较新的。

utf8mb4_0900_ai_ci

utf8mb4毫无疑问代表的是字符集;
0900代表的是unicode校对算法的版本,表示的是unicode校对算法的9.0版本,校对算法是指比较两个unicode的算法;
ai中的a指的是是否区分重音,例如中文的四个音调,英文也有类似的东西,i指的是不区分重音,相对应的还有s表示区分重音;
ci中的c表示是否区分大小写,例如A和a,同样的道理,i表示不区分大小写,相对应的还有s表示区分大小写;

utf8mb4_general_ci

这个排序算法和上面不太一样,并不是使用的unicode的校对算法,所以它也没有版本号啥的,它就叫general,是一个独立实现的排序算法。

对比

utf8mb4_general_ci相对来说排序性能会更好,但是准确性差一点;

utf8mb4_0900_ai_ci由于实现了unicode的排序算法,所以准确性没问题,但是性能相比会稍差点;

♥转载请注明出处♥