每日小结——utf8 和utf8mb4 笔记

MySQL 5.5.3 之后增加了 utf8mb4 字符编码,是utf8的超集

Utf8mb4 特点: 字符集支持每个字符最多四个字节

注意事项:

1.空间选择。Mysql支持的utf8编码最大字符长度3个字节,当使用utf8字符集是,保留的长度是最长字符数*字符串长度。针对使用char类型的字段,如果使用utf8mb4会多消耗空间,建议使用varchar代替char

2.字符集选择。 字符除了需要存储,还需要排序或比较大小,涉及到与编码字符集对应的 排序字符集。ut8mb4对应的排序字符集常用的有 utf8mb4_unicode_ciutf8mb4_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.索引长度,从utf8utf8mb4,容易引起索引键超长错误,InnoDB有单个索引最大字节数 768 的限制,而字段定义的是能存储的字符数,比如 VARCHAR(200) 代表能够存200个汉字,索引定义是字符集类型最大长度算的,超过768后抛出异常

4.Java驱动升级,Java驱动会自动检测服务端character_set_server 的配置,建立连接的时候设置字符集为服务端字符集

升级到utf8mb4

  1. 修改数据库结构,表结构,字段结构,
  2. 修改mysql配置文件
  3. default-character-set = utf8mb4
    
    character-set-client-handshake = FALSE 
    
    character-set-server = utf8mb4 
    
    collation-server = utf8mb4_unicode_ci

 

 

你可能感兴趣的:(日常小结)