1. select count(*) from tableX where code = "XYZ";
2. select count(*) from tableX where code like "%XYZ";
結果查詢1是18734. < ==不正確MySQL之間的不同計數 「其中=」 和 「其中相同的」
結果查詢2是93003. < ==正確
我們知道,基於獨立驗證,查詢2的計數是正確的。
我們預計這兩個查詢到爲每個完全相同的數量,因爲我們知道,在沒有TableX的行必須以「XYZ」結束的代碼,所以在一開始的通配符不應該影響查詢。
爲什麼這些查詢會產生不同的計數?
我們已經研究了「=」比較「喜歡」的字符串比較之間的差異,但基於我們的所有驗證檢查,我們還是不明白爲什麼這會帶給我們不同的計數
我們已確認以下內容:
- 沒有領導或在「代碼」尾隨字符場
- 沒有任何隱藏字符(嘗試了所有在這裏找到:How can I find non-ASCII characters in MySQL?)
- 歸類爲 「utf8_unicode_ci」
我們使用的MySQL版本5.5.40-0ubuntu0.12.04.1。
爲什麼你不加入2個結果集並檢查額外的行? – Fabricator
你怎麼知道查詢2的結果是正確的* tableX中的行沒有以「XYZ」結尾的代碼* –
第一個將無法捕獲所有'code ='blahXYZ'',第二個漁獲。這就是'%'所做的。 – Laurel