mysql排序规则

在MySQL 5.7版本中,默认排序规则为utf8mb4_general_ci。 在MySQL 8.0版本中,默认排序规则为utf8mb4_0900_ai_ci。 由于utf8mb4_0900_ai_ci是MySQL 8.0引入的排序规则,因此将MySQL 8.0版本的表导入到MySQL 5.7或MySQL 5.6版本时,会存在字符集无法识别的问题。

utf8 是 Mysql 中的一种字符集,只支持最长三个字节的 UTF-8 字符.MySQL的“utf8”实际上不是真正的UTF-8。 “utf8”只支持每个字符最多三个字节,而真正的UTF-8是每个字符最多四个字节。可以说MySQL的“utf8”是一种“专属的编码”,它能够编码的Unicode字符并不多。

2010年发布了一个叫作“utf8mb4”的字符集, MySQL在5.5.3之后增加了这个utf8mb4的编码, mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。常见的emoji在这个字符集中也被支持了. 就像这样 😊 !

常用的排序规则有: utf8mb4_general_ci 、 utf8mb4_bin 、 utf8mb4_unicode_ci

utf8mb4_0900_ai_ci

MySQL 8.0 默认的排序规则 ,属于 utf8mb4_unicode_ci 中的一种.

  • uft8mb4 表示用 UTF-8 编码方案,每个字符最多占4个字节。
  • 0900 指的是 Unicode 校对算法版本,代表Unicode 9.0的规范。(Unicode归类算法是用于比较符合Unicode标准要求的两个Unicode字符串的方法)。
  • ai(accent insensitive )指的是口音不敏感,不区分重音。也就是说,排序时e,è,é,ê和ë之间没有区别。与之对应的是as(accent sensitive) 区分重音
  • ci(case insensitive)表示不区分大小写。也就是说,排序时p和P之间没有区别。与之对应的是cs(case sensitive )区分大小写

utf8mb4_unicode_ci

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

utf8mb4_general_ci

准确性: utf8mb4_general_ci 没有实现 Unicode 排序规则,在遇到某些特殊语言或者字符集,排序结果可能不一致。 性能: utf8mb4_general_ci 在比较和排序的时候更快

utf8mb4_bin

*_bin: 表示的是binary case sensitive collation,也就是说是区分大小写的, 将字符串每个字符用二进制数据编译存储,区分大小写,而且可以存二进制的内容。

utf8_unicode_ci 比较准确, utf8_general_ci 速度比较快。通常情况下, 新建数据库时一般选用 utf8_general_ci 就可以了

参考:mysql排序规则,mysql字符集和排序规则 - 飞鸟慕鱼博客 (feiniaomy.com)

mysql排序规则utf8mb4_bin、utf8mb4_unicode_ci、utf8mb4_0900_ai_ci、utf8mb4_general_ci有何区别? - Best Yii | PHP Yii 开发框架最佳实践

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值