当前位置: 首页 > news >正文

MySQL的utf8 、utf8mb3 和 utf8mb4 的区别和排序规则

官网说明:https://dev.mysql.com/doc/refman/8.0/en/charset-unicode.html

MySQL常用字符集说明

utf8

utf8是utf8mb3的别名,除此之外并无不同,并且utf8已经弃用。
在这里插入图片描述

utf8mb3

只支持最长三个字节的BMP(Basic Multilingual Plane,基本多文种平面)字符(不支持补充字符)。
在这里插入图片描述

utf8mb4

mb4即 most bytes 4,即最多使用4个字节来表示完整的UTF-8,具有以下特征:

  • 支持BMP和补充字符。
  • 每个多字节字符最多需要四个字节。

它是utf8的超集并完全兼容它,是MySQL 在 5.5.3 版本之后增加的一个新的字符集,能够用四个字节存储更多的字符,几乎包含了世界上所有能看到见的语言字符。
在这里插入图片描述

比较

在这里插入图片描述

排序规则

介绍

排序规则(collation),字符串在比较和排序时所遵循的规则。不同的字符集有不同的排序规则,同一个字符集也可以有多种排序规则。在 MySQL 8.0.1 及更高版本中将 utf8mb4_0900_ai_ci(属于 utf8mb4_unicode_ci 中的一种) 作为默认排序规则,在这之前 utf8mb4_general_ci 是默认排序规则。

MySQL常用的排序规则

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

  • _bin : 按二进制方式比较字符串,区分大小写和重音符号。
  • _ai_ci:按照特定语言或地区方式比较字符串,不区分大小写和重音符号。
  • _unicode_ci: 按 Unicode 标准方式比较字符串,不区分大小写和重音符号。
  • _general_ci:按一般方式比较字符串,不区分大小写和重音符号。

ci:即case insensitive,不区分大小写,即排序时 p 和 P相同 。
ai:指口音不敏感,即排序时 e,è,é,ê 和 ë 相同。
as:即口音敏感,也就是说,排序时 e,è,é,ê 和 ë 互不相同。
0900: 是 Unicode 校对算法版本。

utf8mb4_unicode_ci 和 utf8mb4_general_ci 的区别

utf8mb4_unicode_ci: 能够在各种语言之间精确排序,Unicode排序规则为了能够处理特殊字符的情况,实现了略微复杂的排序算法。
utf8mb4_general_ci: 不支持扩展,它仅能够在字符之间进行逐个比较。utf8_general_ci 比较速度很快,但比 utf8mb4_unicode_ci 的准确性稍差一些。

准确性
utf8mb4_unicode_ci 是精确排序,utf8mb4_general_ci 没有实现 Unicode 排序规则,在遇到某些特殊语言或者字符集,排序结果可能不一致。
因此,准确性是utf8mb4_unicode_ci > utf8mb4_general_ci

性能
utf8mb4_general_ci 在比较和排序的时候更快。

utf8mb4_unicode_ci 在特殊情况下,Unicode 排序规则为了能够处理特殊字符的情况,实现了略微复杂的排序算法。

因此,性能方面是utf8mb4_general_ci > utf8mb4_unicode_ci

如何选择?
如果在创建数据库时对特殊字符的顺序并不需要那么精确,排序规则可使用utf8mb4_general_ci 。推荐用 utf8mb4_unicode_ci,但是用 utf8mb4_general_ci 也没问题

以上内容借鉴了:https://blog.csdn.net/Lo_CoCo_vE/article/details/132084412

http://www.dtcms.com/a/365282.html

相关文章:

  • 摄像头现代实现WIFI远程实操画面移动
  • Flutter环境搭建全攻略之-Macos环境搭建
  • 【Layui】Layui Table 底部合计栏实现方案
  • CentOS安装vulhub靶场
  • 不同数据类型for循环
  • 从一道面试题开始:如何让同时启动的线程按顺序执行?
  • 物联网能源管控平台建设方案
  • PostgreSQL 技术峰会哈尔滨站活动回顾|深度参与 IvorySQL 开源社区建设的实践与思考
  • FPGA ad9248驱动
  • 计算机视觉(六):腐蚀操作
  • 生产环境中redis的SCAN命令如何替代KEYS命令?
  • 苍穹外卖项目笔记day04--Redis入门
  • ITU-R P.372 无线电噪声预测库调用方法
  • 存算一体:重构AI计算的革命性技术(1)
  • 【LeetCode_283】移动零
  • 配置机载电脑开机自启动ros2节点和配置can0
  • 抗体的应用
  • Mysql学习第五天 Innodb底层原理与Mysql日志机制深入剖析
  • 视频数据如何联网共享?
  • 【底层机制】【C++】vector 为什么等到满了才扩容而不是提前扩容?
  • 编程基础-java开发准备
  • 采用基于模型的方法实现车辆SOA威胁分析自动化
  • 华为云云原生架构赋能:大腾智能加速业务创新步伐
  • HTML第八课:HTML4和HTML5的区别
  • 从零开始学大模型之Transformer 架构
  • 鹧鸪云软件:光伏施工管理一目了然,进度尽在掌握
  • 【Python语法基础学习笔记】类的定义和使用
  • 面试复习题-Flutter场景题
  • C# 开发 ACS 运动控制系统:从入门到高阶应用实践
  • LSE录取率上升,中国申请者却减少!除了成绩,这点成关键胜负手