簡體   English   中英

在MySQL中,LIKE和=是否以相同的方式對待空格?

[英]Does LIKE and = treat withespaces the same way in MySQL?

運行帶有LIKE=某些條件的MySQL查詢時,我有一個奇怪的現象。

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

出於某種原因,數據庫中某些產品代碼的末尾存儲了一個空格(大概是在插入數據的某處沒有修剪)。 因此,例如,上面的產品代碼實際上存儲為'590082QRV040 ' 奇怪的是,如果我使用以下條件運行查詢: products.productcode LIKE '590082QRV040'沒有匹配項,但是對於products.productcode = '590082QRV040'我得到了所需的結果。 我只是想知道是什么原因。 我以為的區別LIKE=是允許使用通配符在LIKE 但是現在我什至沒有通配符,因此兩者的行為應該完全相同。

關於這一點, 文檔非常清楚:

根據SQL標准,LIKE在每個字符的基礎上執行匹配,因此它可以產生與=比較運算符不同的結果:

特別是,尾隨空格很重要,這對於使用=運算符執行的CHAR或VARCHAR比較而言並非如此:

我強烈建議您修正數據:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM