MySQL 排序规则

1. MySQL 排序规则

1.1. 什么是排序规则

在新建 MySQL 数据库或表的时候经常会选择字符集和排序规则。数据库用的字符集大家都知道是怎么回事, 那排序规则是什么呢?

排序规则: 是指对指定字符集下不同字符的比较规则。其特征有以下几点:

  1. 两个不同的字符集不能有相同的排序规则
  2. 两个字符集有一个默认的排序规则
  3. 有一些常用的命名规则。如 _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 准确度高, 但校对速度稍慢。

1.2. 对比

  1. utf8_general_ci 不区分大小写, utf8_general_cs 区分大小写
  2. utf8_bin: compare strings by the binary value of each character in the string 将字符串每个字符串用二进制数据编译存储, 区分大小写, 而且可以存二进制的内容。
  3. 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 的校对规则相比, 比较正确性较差。

1.3. 应用上的差别

  1. 对于一种语言仅当使用 utf8_unicode_ci 排序做的不好时, 才执行与具体语言相关的 utf8 字符集校对规则。例如, 对于德语和法语, utf8_unicode_ci 工作的很好, 因此不再需要为这两种语言创建特殊的 utf8 校对规则。
  2. utf8_general_ci 也适用与德语和法语, 除了 ? 等于 s, 而不是 ss 之外。如果你的应用能够接受这些, 那么应该使用 utf8_general_ci, 因为它速度快。否则, 使用 utf8_unicode_ci, 因为它比较准确。

1.4. 使用

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

  • 9
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MySQL中,表的排序规则被称为“排序规则(Collation)”。它是一种用于定义字符排序和比较的机制。不同的排序规则可以影响字符串比较的结果。例如,在某些排序规则下,大小写字母被视为不同,而在其他排序规则下,它们被视为相同。 如果要修改MySQL表的排序规则,可以按照以下步骤进行: 1. 确定现有排序规则:使用以下命令,可以查看表的当前排序规则。 SHOW TABLE STATUS WHERE Name='table_name'; 2. 确定新的排序规则:可以从MySQL官方文档中查找可用的排序规则,并选择适合您的应用程序的规则。例如,如果您需要对非英语文本排序,可以选择支持多字节字符集(MB)的规则。 3. 更改表的排序规则:使用以下命令更改表的排序规则。 ALTER TABLE table_name CONVERT TO CHARACTER SET charset_name COLLATE collation_name; 其中,charset_name是您要使用的字符集的名称,collation_name是您要使用的排序规则的名称。 4. 确认更改:使用SHOW TABLE STATUS WHERE Name='table_name';检查表的状态,以确认更改是否成功。 5. 注意事项:修改表的排序规则可能会影响数据的排序和比较。如果您要在应用程序中使用新的排序规则,请确保您的代码和数据库查询语句都考虑了这个变化。 总之,修改MySQL表的排序规则是一项敏感的任务,需要谨慎考虑和测试。正确地选择和应用排序规则可以提高应用程序的性能,并确保在不同字符集下的正确性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云满笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值