MySQL在 5.5.3 之后增加了 utf8mb4 字符编码,是utf8的超集
Utf8mb4 特点: 字符集支持每个字符最多四个字节
注意事项:
1.空间选择。Mysql支持的utf8编码最大字符长度3个字节,当使用utf8字符集是,保留的长度是最长字符数*字符串长度。针对使用char类型的字段,如果使用utf8mb4会多消耗空间,建议使用varchar代替char
2.字符集选择。 字符除了需要存储,还需要排序或比较大小,涉及到与编码字符集对应的 排序字符集。ut8mb4对应的排序字符集常用的有 utf8mb4_unicode_ci、utf8mb4_general_ci
- 准确性
utf8mb4_unicode_ci 是基于标准的Unicode来排序和比较,能够在各种语言之间精确排序
utf8mb4_general_ci 没有实现Unicode排序规则,在遇到某些特殊语言或字符是,排序结果可能不是所期望的。比如Unicode把ß、Œ当成ss和OE来看;而general会把它们当成s、e,再如ÀÁÅåāă各自都与 A 相等。 - 性能
utf8mb4_general_ci 在比较和排序的时候更快
utf8mb4_unicode_ci 在特殊情况下,Unicode排序规则为了能够处理特殊字符的情况,实现了略微复杂的排序算法。
3.索引长度,从utf8转utf8mb4,容易引起索引键超长错误,InnoDB有单个索引最大字节数 768 的限制,而字段定义的是能存储的字符数,比如 VARCHAR(200)
代表能够存200个汉字,索引定义是字符集类型最大长度算的,超过768后抛出异常
4.Java驱动升级,Java驱动会自动检测服务端character_set_server
的配置,建立连接的时候设置字符集为服务端字符集
升级到utf8mb4
- 修改数据库结构,表结构,字段结构,
- 修改mysql配置文件
-
default-character-set = utf8mb4 character-set-client-handshake = FALSE character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci