簡體   English   中英

MySQL搜索包含空格的值返回空結果(無行)

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

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