4
2
0
0
专栏/.../

TiDB与MySQL的模糊查询大小写

 xuexiaogang  发表于  2022-05-23

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

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

image.png

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

于是来一个MySQL的,MySQL8.0.29

2e80454c71075fba9b38287189ce9cd3_bb.png

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

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

在Tidb下会不会也继承呢?

d620702d51f9b12d0e5ceaea57340cf8_bb.png

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

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

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

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

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

bf4a4dae21dc29c3660b36c19214ee9d_bb.png

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

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

4
2
0
0

版权声明:本文为 TiDB 社区用户原创文章,遵循 CC BY-NC-SA 4.0 版权协议,转载请附上原文出处链接和本声明。

评论
暂无评论