如图,通常使用以下配置mysql
utf8mb4是4个字节。utf8是3个字节。utf8mb4兼容性更好,占用空间更大。算法
主要从排序准确性和性能两方面看:sql
utf8mb4_unicode_ci
是基于标准的Unicode来排序和比较,可以在各类语言之间精确排序utf8mb4_general_ci
没有实现Unicode排序规则,在遇到某些特殊语言或字符是,排序结果可能不是所指望的。ß
、Œ
当成ss
和OE
来看;而general会把它们当成s
、e
,再如ÀÁÅåāă
各自都与 A
相等。utf8mb4_general_ci
在比较和排序的时候更快utf8mb4_unicode_ci
在特殊状况下,Unicode排序规则为了可以处理特殊字符的状况,实现了略微复杂的排序算法。utf8mb4_unicode_ci
,未来 8.0 里也极有可能使用变为默认的规则。相比选择哪种collation,使用者应该更关心字符集与排序规则在db里要统一就好。这也从另外一个角度告诉咱们,不要可能产生乱码的字段做为主键或惟一索引。我遇到过一例,以 url 来做为惟一索引,可是它记录的有多是乱码,致使后来想把它们修复就特别麻烦。性能
参考:url
一、https://my.oschina.net/xsh1208/blog/1052781.net
二、http://seanlook.com/2016/10/23/mysql-utf8mb4/设计