什么是 MySQL 的排序规则(Collation)?

马富天

2020-01-19 14:56:58

15

【摘要】当我们在使用 navicate for mysql 等第三方客户端管理界面新建一个数据库时,会让我们填入数据库名,并选择字符集和对应的排序规则(可选项),但我们往往只填入数据库名,会忽略字符集和对应的排序规则,但实际上我之前对这个排序规则并不是很了解,所以本文对 MySQL 的排序规则进行简单的总结。

排序规则指的是对指定的字符集下字符的比较规则。它会影响到存储在表中的字符串排序问题,如 order by 语句查询结果的顺序。

当我们选定字符集时,则只能排序规则要选定与 utf8mb4 字符集对应的排序规则,如在选定字符集 utf8mb4 后,会自动列出对应符合的排序规则(一般默认为 utf8mb4_general_ci)。因为 utf8mb4 是推荐使用的,所以下面以选定 utf8mb4 字符集为例。

当然,我们也可以通过 SQL 来设置字符集和排序规则,如下:

create database testdb default charset utf8mb4 collate utf8mb4_general_ci;

查看当前安装的 mysql 版本所能支持的字符集列表(不同的版本支持的结果不一样):mysql> show char set;

以下三种排序规则的区别:

utf8mb4_general_ci:没有实现 Unicode 排序规则,在遇到某些特殊语言或者字符集,排序结果可能不一致,但是,在绝大多数情况下,我们不需要对这些特殊字符的顺序要过太精确。校对速度快,但准确度稍差,所以通常情况下都会选择此规则。

utf8mb4_unicode_ci:基于标准的 Unicode 来排序和比较,能够在各种语言之间进行精确排序,在特殊情况下,Unicode 排序规则为了能够处理特殊字符的情况,实现了略微复杂的排序算法,所以兼容度比较高,但是性能不高。准确度高,但校对速度稍慢。

utf8mb4_bin:将字符串的每个字符用二进制数据编译存储。

后缀区别(参考地址 https://dev.mysql.com/doc/refman/5.6/en/charset-collation-names.html):

_aiAccent-insensitive 指重音不敏感(不区分重音)

_asAccent-sensitive 指重音敏感(区分重音)

_ciCase-insensitive 指大小写不敏感(不区分大小写)

_csCase-sensitive 指大小写敏感(区分大小写)

_bin Binary 指二进制存储(区分大小写)

接下来用实例来简单说明一下,排序规则是对 order by、where 等关键字有影响的,但是这里没有深入的去研究,这部分只是作为了解排序规则是什么,并不做更多的学习。mysql> use testdb;

mysql> set names utf8mb4;

mysql> create table user(id int auto_increment primary key,name varchar(255)) engine=innodb default charset=utf8mb4 collate=utf8mb4_unicode_ci;

mysql> insert into user(name) values('Mafutian.net');

mysql> insert into user(name) values('MAfutian.net');

mysql> insert into user(name) values('mafutian.net');

mysql> insert into user(name) values('mAfutian.net');

mysql> insert into user(name) values('mAfutian_net');

mysql> select id,name from user order by name collate utf8mb4_general_ci;

+----+--------------+

| id | name |

+----+--------------+

| 1 | Mafutian.net |

| 2 | MAfutian.net |

| 3 | mafutian.net |

| 4 | mAfutian.net |

| 5 | mAfutian_net |

+----+--------------+

mysql> select id,name from user order by name collate utf8mb4_bin;

+----+--------------+

| id | name |

+----+--------------+

| 2 | MAfutian.net |

| 1 | Mafutian.net |

| 4 | mAfutian.net |

| 5 | mAfutian_net |

| 3 | mafutian.net |

+----+--------------+

mysql> select id,name from user order by name collate utf8mb4_unicode_ci;

+----+--------------+

| id | name |

+----+--------------+

| 5 | mAfutian_net |

| 1 | Mafutian.net |

| 2 | MAfutian.net |

| 3 | mafutian.net |

| 4 | mAfutian.net |

+----+--------------+

由此可见(不存在 utf8mb4_unicode_cs),其实 mysql 的排序规则就是对字符的排序的一种方式,不同的规则会对查询结果有不一样的排序,对此咱们只要知道有这么回事,也用不必进行深入的探究,点到即可。

最后小 Tips :mb4 即 most bytes 4

顶1

踩0

我要打赏

mysql 中文排序是什么规则_什么是 MySQL 的排序规则(Collation)?相关推荐

  1. mysql 聚合函数内比较运算符_关于常用 MYSQL 聚合函数,其他函数 ,类型转换,运算符 总结...

    /* 关于MYSQL 聚合函数,其他函数 ,类型转换,运算符 总结,*/ -- 1 运算符优先级  /* 12.1.1. 操作符优先级 以下列表显示了操作符优先级的由低到高的顺序.排列在同一行的操作符 ...

  2. sae mysql 同步本地_MYSQL入门之三_将本地MySQL数据导入SAE数据库_MySQL

    bitsCN.com MYSQL入门之三_将本地MySQL数据导入SAE数据库 1. MySQL字符集 MySQL的默认字符集是latin1,将本地MySQL库导出成sql,再导入到SAE的MySQL ...

  3. mysql双机热备 读写分离_轻松搭建MySQL主从复制、读写分离双机热备)

    注意:如果此步骤始终为空设置(0.00秒),则表示先前的my.cnf配置不正确,请返回并重试检查配置步骤. (从)数据库中的配置 1.修改从属库的数据库配置文件 [root @ localhost]# ...

  4. mysql中获取时间的年月日_详解mysql 获取当前日期及格式化

    MySQL 获取当前日期及日期格式 获取系统日期: NOW() 格式化日期: DATE_FORMAT(date, format) 注: date:时间字段 format:日期格式 返回系统日期,输出 ...

  5. mysql数据库+易语言的应用_易语言mysql数据应用源码

    易语言mysql数据应用源码 易语言mysql数据应用源码 系统结构:注册账号,连接Mysql,用户注册验证码,修改密码验证码,忘记密码验证码,修改密码,忘记密码, ======窗口程序集1 | | ...

  6. mysql 查询用户最后登陆时间_弄懂mysql:mysql的通信协议

    我准备从mysql的实现出发,将mysql好好理解一下,从他的逻辑结构一层一层出发,感受一下,所以再学第一层之前,要先对mysql整体的逻辑结构有一个初步认识 mysql逻辑架构 整体来说,MySql ...

  7. 数据结构排序算法实验报告_[数据结构与算法系列]排序算法(二)

    我的上一篇文章向大家介绍了排序算法中的冒泡排序.插入排序和选择排序.它们都是平均时间复杂度为 O(n^2) 的排序算法,同时还为大家讲解了什么是原地排序和什么是排序的稳定性.下图是这三种算法的比较,不 ...

  8. mysql修改表结构大表_在线修改MySQL大表的表结构

    由于某个临时需求,需要给在线MySQL的某个超过千万的表增加一个字段.此表在设计之时完全按照需求实现,并没有多余的保留字段. 我们知道在MySQL中如果要执行ALTER TABLE操作,MySQL会通 ...

  9. 详解mysql数据库的启动与终止_详解MySQL数据库的启动与终止(一)

    由于MySQL服务器具有多种安装分发,而且能够运行在多种操作平台之上,因此它的启动与停止的方法也多种多样.你可以根据实际情况使用其中的一种.在你安装.升级或者维护系统时,你可能需要多次启动和终止服务器 ...

最新文章

  1. Spring Security教程 Vol 9. AccessDecisionManager组件介绍
  2. js打开、关闭页面和运行代码那些事
  3. ajax ssm 页面跳转_SSM用jq整合Ajax入门案例讲解
  4. Win7小工具“概念时钟”,v2.1.8.6
  5. SqlServer标识列、修改标识列值
  6. php 扩展加载顺序,关于PHP中extension加载顺序问题的解决方法
  7. 代码逻辑分析_双十一模块 79.34% 的代码是怎样智能生成的
  8. udp java 实例_udp例子,javaudp简单实例分享
  9. matlab建立机器人模型,matlab 机器人工具箱8-通过URDF建立机器人模型
  10. 关于n阶线性齐次常微分的特征方程特征根相同时解的推导
  11. Codeforces Round #545 (div 1.)
  12. Windows10系统自带中文输入法繁体改为简体
  13. c语言(http://c.biancheng.net/view/1714.html)
  14. 茅山煤矿轶事(二)狼来了
  15. 谷歌将于2023年在日本开设其首个数据中心
  16. 主持人百度百科词条怎么做?主持人怎么申请百科词条?
  17. html调用暴风影音,用暴风影音转换视频格式教程
  18. php中获取金钱,PHP处理金钱和金钱价值观
  19. 服务器文件监控软件,强大的大势至FTP文件服务器监控软件v.1.1 共享版
  20. ElasticSearch倒排索引-构建千亿级日志分析系统

热门文章

  1. 粒子群算法优化PID参数实例
  2. 面试中的杂七杂八-英文篇
  3. linux操作系统初识,命令
  4. php 外观模式,外观模式的作用
  5. 多场面试总结的JAVA技术面试题
  6. 摩托车爱好者头盔的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  7. python怎么实现检验_用python进行KS检验
  8. 2023njupt-南邮的《工程与社会》课程[ppt+论文(水文)]
  9. 一个非英语专业的人的自述:我如何用一年时间考上欧盟口译司
  10. 字节跳动Dev Better技术沙龙成功举办,携手华泰分享Web研发效能提升经验