MySQL字符集和排序规则

1、utf8字符编码

    标准的UTF-8 字符集编码,是可以用 1~4 个字节去编码21位字符,是一种变长的编码格式,这几乎包含了是世界上所有能看见的语言了。
    然而在MySQL里实现的utf8最长使用3个字节,节省空间但不能表达全部的UTF-8,只支持到了 Unicode 中的“基本多文种平面”(U+0000至U+FFFF,Basic Multilingual Plane,BMP),但并不是所有。现在手机端常用的表情字符 emoji和一些不常用的汉字需要四个字节才能编码出来。

2、utf8mb4 字符编码

    MySQL在 5.5.3 之后增加了 utf8mb4 字符编码,mb4即 most bytes 4,使用4个字节来表示完整的UTF-8,是utf8 的超集并完全兼容utf8,能够用4个字节存储更多的字符。

3、字符集排序规则的

utf8mb4_bin: 将字符串每个字符用二进制数据编译存储,区分大小写,而且可以存二进制的内容。

utf8mb4_general_ci:不区分大小写,不支持扩展,它仅能够在字符之间进行逐个比较,没有实现Unicode排序规则,在遇到某些特殊语言或者字符集,排序结果可能不一致。但是,在绝大多数情况下,这些特殊字符的顺序并不需要那么精确。

utf8mb4_unicode_ci:是基于标准的unicode来排序和比较,能够在各种语言之间精确排序,unicode排序规则为了能够处理特殊字符的情况,实现了略微复杂的排序算法。

_bin: binary case sensitive collation,区分大小写的

_cs: case sensitive collation,区分大小写

_ci: case insensitive collation,不区分大小写

4、如何选择

    主要从排序准确性和性能两方面看:

  • 准确性

    utf8mb4_unicode_ci:
    基于标准的Unicode来排序和比较,能够在各种语言之间精确排序。

    utf8mb4_general_ci:
    没有实现Unicode排序规则,在遇到某些特殊语言或字符时,可能会出现错误。比如unicode把ß、Œ当成ss和OE来看;而general会把它们当成s、e,再如ÀÁÅåāă各自都与 A 相等。

  • 性能

    utf8mb4_general_ci:
    在比较和排序的时候更快

    utf8mb4_unicode_ci:
    在特殊情况下,Unicode排序规则为了能够处理特殊字符的情况,实现了略微复杂的排序算法。
    但是一般情况不会发生这样复杂的比较。general理论上比unicode可能快些,但相比现在的
    CPU来说,数据库索引、SQL设计才是性能考虑的主要因素。

  • 总结
    utf8mb4_general_ci 更快,utf8mb4_unicode_ci 更准确

  • 转自Mysql中的UTF-8字符集与字符集排序规则的选择 - 简书

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值