我爱人做测试工作,遇到问题问我说她们测试时候要求 不区分大小写,比如M1和m1都显示。我第一反应需求不合理啊。数据库一般来说都是等值比较的。否则就要去做一些工作了。我就展开了一个实验场景,给她看看。实验场景是Oracle19C,效果如下:
精确查询a1的时候返回a1,模糊查询的时候没有A1。这是我预期的。
但是她说她们系统不区分的。我想到她们系统是MySQL的,理论上MySQL也应该这样才是。
于是来一个MySQL的,MySQL8.0.29
这个结果说实在的有点让我吃惊。显然MySQL是没有区分。这时候我通常会引入PostgreSQL来进行对比。
PG下是什么情况呢?
这是PG14版本的结果,PG和Oracle的执行效果是一样的。
既然这样看来,可以说其实模糊区分大小写不是个例。 更加准确的说,这个和是不是模糊查询无关。而是说我们查询是不是区分大小写。即使是精确查询。
随即我又想到了兼容MySQL的Tidb。
在Tidb下会不会也继承呢?在tidb5.3的场景下,也是查询区分大小写的。可见TiDB在这点上是和Oracle、PG的执行器是一样的。
那么是MySQL错了吗?其实我倒是觉得这个可能要分场景,真的没有对错。PG、Oracle、TiDB如实反馈没有错。如果这个时候有个需求说要不区分怎么办?通常程序会改 小写 or 大写。即应用程序分别匹配一下。而MySQL就不用改了。
但是如果需求说就是要如实反馈,区分呢?显然MySQL默认下是不行了,有没有办法改呢?
有的。这样就可以了。所以说没有对错吧。
不过一开始的确翻车了,因为Oracle思维习惯,觉得是区分的,但是MySQL是不区分的。这种主要看是看数据库。

文章转载自四海内皆兄弟,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。









