TiDB 与 MySQL 的模糊查询大小写
作者: 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 默认下是不行了,有没有办法改呢?
有的。这样就可以了。所以说没有对错吧。大家在使用两者的时候注意一下这个区别。
但是这点上 TiDB 都是在默认设置上采用了区分。我主要目的是为了是让一些从 MySQL 迁移过来的朋友有个注意。否则可能觉得遇到了问题或者 bug,而其实不是这样的。因为毕竟我就遇到了。
版权声明: 本文为 InfoQ 作者【TiDB 社区干货传送门】的原创文章。
原文链接:【http://xie.infoq.cn/article/9234652afafb14e415674fe3d】。文章转载请联系作者。
评论