2016-03-11 17 views
0

運行帶有LIKE=的某些條件的MySQL查詢時,我遇到了一個奇怪的現象。LIKE和=在MySQL中以相​​同的方式對待withespaces嗎?

SELECT 
    ... 
FROM 
    ... 
WHERE 
    products.productcode LIKE '590082QRV040' 
    AND ... 

出於某種原因,在數據庫中的一些productcodes被存儲並在後面加上一個空格字符(可能缺乏微調某處的數據被插入)。因此,例如上面的產品代碼實際上存儲爲'590082QRV040 '。奇怪的是,如果我使用如下條件運行查詢:products.productcode LIKE '590082QRV040'沒有匹配,但對於products.productcode = '590082QRV040'我得到了期望的結果。我只是想知道是什麼原因。我認爲LIKE=之間的區別在於LIKE中允許使用通配符。但現在我甚至沒有通配符,所以兩者應該完全一樣。

回答

4

documentation在這一點上,而明確:

每SQL標準,LIKE基於每個字符的基礎上執行的匹配, 因而它能產生從=比較運算符不同的結果:

。 。 。

尤其是尾部的空格是顯著,這是不是與=操作員執行 CHAR或VARCHAR比較真實:

我強烈建議你修復數據:

update products p 
    set p.productcode = trim(p.productcode); 
+0

大答案... +1 – Shafizadeh

相關問題