加入收藏 | 设为首页 | 会员中心 | 我要投稿 财气旺网 - 财气网 (https://www.caiqiwang.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

Mysql的排序集的pad space和no pad

发布时间:2022-11-06 14:32:30 所属栏目:MySql教程 来源:网络
导读: 说这个知识点之前,先看下我发现这个问题的环境:mysql8.0字符集(建议大家用utf8mb4mysql排序,否则你会遇到表情的坑,比如微信名带表情的):

3.排序集:

接下来我们看现象:
首先表结

说这个知识点之前,先看下我发现这个问题的环境:mysql8.0字符集(建议大家用utf8mb4mysql排序,否则你会遇到表情的坑,比如微信名带表情的):

mysql 查询 按时间排序_mysql排序_mysql 搜索权重排序

3.排序集:

mysql 搜索权重排序_mysql 查询 按时间排序_mysql排序

接下来我们看现象:

首先表结构是这样的:

  CREATE TABLE `t_coll_test` (
  `id` int(11) NOT NULL,
  `name` varchar(10) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

接下来,我们插入一条sql:

     insert into t_coll_test values(1,'nihao');

然后我们接下来通过一条查询语句看下输入结果:

当让这是意料之中的。

接下来我们用另一个查询语句,看看结果是什么

mysql排序_mysql 搜索权重排序_mysql 查询 按时间排序

细心的小伙伴不知道发现了没?我们在name的后面的查询值多加了个几个空格(空格数量不限),你会发现它竟然也会查出来(当时业务上出了这个坑,哎,都以为是代码问题)

解释一下:

为什么会发生这个问题,这个就是mysql的排序集的pad space和no pad导致的。先看看官网怎么解释的:

For nonbinary strings (CHAR, VARCHAR, and TEXT values), the string collation pad attribute determines treatment in comparisons of trailing spaces at the end of strings:

For PAD SPACE collations, trailing spaces are insignificant in comparisons; strings are compared without regard to trailing spaces.

NO PAD collations treat trailing spaces as significant in comparisons, like any other character.

10.8.5 The binary Collation Compared to _bin Collations

大概意思就是说对于 PAD SPACE 排序规则,尾随空格在比较中无关紧要;比较字符串时不考虑尾随空格,而对于NO PAD就需要考虑空格

然后我们看看怎么知道自己的排序集是NO PAD呢?还是PAD SPACE?

  SELECT COLLATION_NAME, PAD_ATTRIBUTE
       FROM INFORMATION_SCHEMA.COLLATIONS
       WHERE COLLATION_NAME LIKE 'utf8%bin'

使用上面的语句就可以查出来,结果如下

mysql排序_mysql 搜索权重排序_mysql 查询 按时间排序

我测试用的数据库默认的排序集是

mysql 查询 按时间排序_mysql 搜索权重排序_mysql排序

果然是PAD SPACE,所以才导致上面的现象。。

接下来我们改下这个表的排序集,变成NO PAD的utf8mb4_0900_ai_ci:

alter table t_coll_test modify column name varchar(10) collate utf8mb4_0900_ai_ci;

最终的表结构输入结果:(这里发现了一个有趣点,mysql帮你把字符集都改了)

接下来重复上面的查询:

哈哈,你会发现现在查不出来了。

总结

1. 排序集为PAD SPACE可以忽略查询值的空格,NO PAD不会忽略。

2.大家建表的时候一定要关注字符集和排序集,否则就是留坑

(编辑:财气旺网 - 财气网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!