[英]MySQL search for value containing spaces returns empty result (no rows)
我有一個MySQL
數據庫 ,其中包含一個包含部件號的列。 部分編號包含空格 :
3864205010 J
當我查詢數據庫或在phpMyAdmin
搜索該部分時,不會返回任何結果。
然而,當我delete
2個空格然后再次鍵入它們時,搜索會返回結果。
此查詢不返回結果:
SELECT *
FROM `parts`
WHERE `part_no` LIKE '3864205010 K'
此查詢返回結果:
SELECT *
FROM `parts`
WHERE `part_no` LIKE '3864205010 K'
它們看起來相同但在第二個查詢中我刪除了“K”之前的2個空格並再次輸入空格。
如果您可以使用通配符而不是空格:
SELECT *
FROM `parts`
WHERE `part_no` LIKE '3864205010%K'
是更新的問題,如果你想刪除更多的空間,其中的內容可能是3或4以下的空格,查詢將使用full
SELECT REPLACE( REPLACE( part_no, " ", " " ), " ", " " ) from parts.
讓我知道它是否適合您?
SELECT *
FROM `parts`
WHERE REPLACE(REPLACE(`part_no`, CHAR(9), ''),' ','') LIKE REPLACE(REPLACE('3864205010 K', CHAR(9), ''),' ','')
如果part_no
和/或搜索字符串包含制表符和/或空格,則這可能有效。
這可能不是空格而是HTAB(ascii代碼9)或甚至換行/回車(10和13)。 在一個好的文本編輯器中復制粘貼,你會看到它到底是什么。
現在,關於你為什么它不工作的奇跡,即使它看起來像一個空格,這是因為我們看到的每一個字符都由引擎解釋(記事本,phpmyadmin,firefox ......任何帶文本渲染的軟件)
實際發生的是,當引擎找到ascii代碼時,它會將其轉換為可見字符。 例如,CHAR(9)經常被轉換成通常等於2或4個空格的“大空間”。 但phpmyadmin可能只是決定不這樣做。
其他示例是換行(CHAR(10))。 在文本編輯器中,它將是該行結束的信號,並且(在大多數unix系統下)必須啟動新行。 但是您可以將此換行符復制到數據庫字段中,您只是不確定它將如何呈現。 因為他們希望你看到單元格中的所有內容,他們可能會選擇將其渲染為空格......但是如果你看一下它的ascii代碼那就不是空格了(這里沒有技巧,所有渲染引擎都會告訴你對ascii代碼)。
始終使用ascii代碼處理字符非常重要。
上面的答案建議使用通配符而不是空格。 這可能匹配,或者可能不匹配。 假設你的字符串是'386420K5010',所以它不是你想要的那個,仍然是LIKE'3864205010%K'模式會返回它。 最好的可能是使用正則表達式或至少識別這些字符串的固定模式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.