MySQL中的排序规则

 更新时间:2023年11月24日 08:39:56   作者:云满笔记  
这篇文章主要介绍了MySQL中的排序规则,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

1. 什么是排序规则

在新建 MySQL 数据库或表的时候经常会选择字符集和排序规则。

数据库用的字符集大家都知道是怎么回事, 那排序规则是什么呢?

排序规则:

是指对指定字符集下不同字符的比较规则。

其特征有以下几点

  • 两个不同的字符集不能有相同的排序规则
  • 两个字符集有一个默认的排序规则有一些常用的命名规则。
  • _ci 结尾表示大小写不敏感 (caseinsensitive), _cs 表示大小写敏感 (case sensitive), _bin 表示二进制的比较 (binary).

utf-8 有默认的排序规则

命令: SHOW CHARSET LIKE 'utf8%';

区别:

  • utf8_general_ci 不区分大小写, 这个你在注册用户名和邮箱的时候就要使用。
  • utf8_general_cs 区分大小写, 如果用户名和邮箱用这个 就会照成不良后果
  • utf8_bin: 字符串每个字符串用二进制数据编译存储。 区分大小写, 而且可以存二进制的内容
  • utf8_general_ci 校对速度快, 但准确度稍差。
  • utf8_unicode_ci 准确度高, 但校对速度稍慢。

2. 对比

  • utf8_general_ci 不区分大小写, utf8_general_cs 区分大小写
  • utf8_bin: compare strings by the binary value of each character in the string 将字符串每个字符串用二进制数据编译存储, 区分大小写, 而且可以存二进制的内容。
  • utf8_unicode_ci 校对规则仅部分支持 Unicode 校对规则算法, 一些字符还是不能支持; utf8_unicode_ci 不能完全支持组合的记号。

说明: ci 是 case insensitive, 即 “大小写不敏感”, aA 会在字符判断中会被当做一样的。

bin 是二进制, aA 会别区别对待。

例如你运行:

SELECT * FROM table WHERE txt = 'a'

那么在 utf8_bin 中你就找不到 txt = 'A' 的那一行, 而 utf8_general_ci 则可以。

utf8_general_ci 是一个遗留的 校对规则, 不支持扩展, 它仅能够在字符之间进行逐个比较。

这意味着 utf8_general_ci 校对规则进行的比较速度很快, 但是与使用 utf8_unicode_ci 的校对规则相比, 比较正确性较差。

3. 应用上的差别

1.对于一种语言仅当使用 utf8_unicode_ci 排序做的不好时, 才执行与具体语言相关的 utf8 字符集校对规则。

例如, 对于德语和法语, utf8_unicode_ci 工作的很好, 因此不再需要为这两种语言创建特殊的 utf8 校对规则。

2.utf8_general_ci 也适用与德语和法语, 除了 ? 等于 s, 而不是 ss 之外。

如果你的应用能够接受这些, 那么应该使用 utf8_general_ci, 因为它速度快。

否则, 使用 utf8_unicode_ci, 因为它比较准确。

4. 使用

utf8_unicode_ci 比较准确, utf8_general_ci 速度比较快。

通常情况下, 新建数据库时一般选用 utf8_general_ci 就可以了。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • windows下如何解决mysql secure_file_priv null问题

    windows下如何解决mysql secure_file_priv null问题

    这篇文章主要介绍了windows下如何解决mysql secure_file_priv null问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • MySQL数据库使用mysqldump导出数据详解

    MySQL数据库使用mysqldump导出数据详解

    mysqldump是mysql用于转存储数据库的实用程序。它主要产生一个SQL脚本,其中包含从头重新创建数据库所必需的命令CREATE TABLE INSERT等。接下来通过本文给大家介绍MySQL数据库使用mysqldump导出数据详解,需要的朋友一起学习吧
    2016-04-04
  • Mysql联表update数据的示例详解

    Mysql联表update数据的示例详解

    这篇文章主要介绍了Mysql联表update数据的示例详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • Mysql添加联合唯一索引及相同数据插入报错问题

    Mysql添加联合唯一索引及相同数据插入报错问题

    这篇文章主要介绍了Mysql添加联合唯一索引及相同数据插入报错问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • MySQL 重命名表的操作方法及注意事项

    MySQL 重命名表的操作方法及注意事项

    有时候我们会遇到重命名表的需求,比如说因业务变化,需要将表 a 重命名为表 b 。这个时候可以执行 RENAME TABLE 语句或 ALTER TABLE 语句来重命名表。本篇文章我们一起来学习下重命名表相关知识。
    2021-05-05
  • windows下mysql 8.0.15 详细安装使用教程

    windows下mysql 8.0.15 详细安装使用教程

    这篇文章主要为大家详细介绍了windows下mysql 8.0.15 详细安装使用教程,文中安装步骤介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • MySQL之InnoDB下的锁问题

    MySQL之InnoDB下的锁问题

    这篇文章主要介绍了MySQL之InnoDB下的锁问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • Navicat导入mysql数据库的图文教程

    Navicat导入mysql数据库的图文教程

    本文主要介绍了Navicat导入mysql数据库的图文教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • SQL实现LeetCode(183.从未下单订购的顾客)

    SQL实现LeetCode(183.从未下单订购的顾客)

    这篇文章主要介绍了SQL实现LeetCode(182.从未下单订购的顾客),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • 提高MySQL中数据装载效率

    提高MySQL中数据装载效率

    很多时候关心的是优化SELECT 查询,因为它们是最常用的查询,而且确定怎样优化它们并不总是直截了当。
    2009-11-11

最新评论