每日小结——utf8 和utf8mb4 笔记

本文介绍了MySQL从5.5.3版本开始引入的utf8mb4字符编码,它是utf8的超集,支持最多四个字节的字符。在使用utf8mb4时需要注意空间选择,如varchar代替char以节省空间。此外,还讨论了utf8mb4对应的排序字符集,如utf8mb4_unicode_ci和utf8mb4_general_ci的差异,以及它们在性能和准确性上的权衡。文章还提醒了索引长度限制可能导致的问题,并提及Java驱动与服务端字符集的配合。最后,提到了升级到utf8mb4所需的数据库和表结构修改。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值