模糊查詢區分大小寫嗎?

xuexiaogang發表於2022-05-23

     我愛人做測試工作,遇到問題問我說她們測試時候要求 區分大小寫,比如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是不區分的。這種主要看是看資料庫。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/637517/viewspace-2895761/,如需轉載,請註明出處,否則將追究法律責任。

相關文章