[英]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.