写点什么

TiDB 与 MySQL 的模糊查询大小写

  • 2022 年 7 月 11 日
  • 本文字数:718 字

    阅读完需:约 2 分钟

作者: xuexiaogang 原文来源:https://tidb.net/blog/f7d60508


  我爱人做测试工作,遇到问题问我说她们测试时候要求不区分大小写,比如 M1 和 m1 都显示。我第一反应需求不合理啊。数据库一般来说都是等值比较的。否则就要去做一些工作了。我就展开了一个实验场景,给她看看。实验场景是 Oracle19C,效果如下:


精确查询 a1 的时候返回 a1,模糊查询的时候没有 A1。这是我预期的。



但是她说她们系统不区分的。我想到她们系统是 MySQL 的,理论上 MySQL 也应该这样才是。


于是来一个 MySQL 的,MySQL8.0.29



这个结果说实在的有点让我吃惊。显然 MySQL 是没有区分。


那么我自然想到了兼容 MySQL 的 TiDB 是怎么做的呢?


在 Tidb 下会不会也继承呢?



在 tidb5.3 的场景下,也是查询区分大小写的。


其实说模糊查询,其实不准确,应该说查询即使精确查询都是区分大小写的。TiDB 并没有继承 MySQL 的优化器和执行器,而是采用类似 Oracle 的方式来做判断和执行。


那么是 MySQL 错了吗?其实我倒是觉得这个可能要分场景,真的没有对错。Oracle、TiDB 如实反馈没有错。如果这个时候有个需求说要不区分怎么办?通常程序会改 小写 or 大写。即应用程序分别匹配一下。而 MySQL 就不用改了。


但是如果需求说就是要如实反馈,区分呢?显然 MySQL 默认下是不行了,有没有办法改呢?


有的。这样就可以了。所以说没有对错吧。大家在使用两者的时候注意一下这个区别。



最终我其实想表达的是:我只是说默认的rpm安装没有指定。当然在字符集设置上也可以指定,带bin的可以。否则要显示指定。
复制代码


但是这点上 TiDB 都是在默认设置上采用了区分。我主要目的是为了是让一些从 MySQL 迁移过来的朋友有个注意。否则可能觉得遇到了问题或者 bug,而其实不是这样的。因为毕竟我就遇到了。


发布于: 刚刚阅读数: 2
用户头像

TiDB 社区官网:https://tidb.net/ 2021.12.15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
TiDB与MySQL的模糊查询大小写_开发语言_TiDB 社区干货传送门_InfoQ写作社区