2013-04-05 54 views
0

QUERY:搜索與X&Y開頭的字符串,返回0結果的MySQL

SELECT * 
FROM MyTable 
WHERE SomeCol LIKE '%X & Y%' 

不返回任何結果,即使我的表中包含的行,其SomeCol = 'X & Y Some More Text'

,如果我只是尋找'%Z & J%'返回1但在該記錄中SomeCol = 'Some Preceeding Text Z & J'

所以基本上它返回0行,如果&符號在空格字符串的開始處,但如果它在中間或結尾處則返回正確的行。

任何想法爲什麼會發生這種情況?

注:請注意%X & Y%只是一個檢索串,有可能是其他字符串,我對代碼的搜索,如純字符串'%some text%'

+0

如果'X&Y'始終處於開始狀態,那麼您可以使用'WHERE SomeCol LIKE'X&Y%'' – 2013-04-05 15:32:55

+0

no它並不總是在開始時它可以在任何地方 – GGio 2013-04-05 15:33:19

+0

'SELECT'X&Y Some More Text 'LIKE'%X&Y%''爲我返回'1',你確定沒有任何問題,例如與字符或其他代碼的編碼? – MMM 2013-04-05 15:40:35

回答

3

我能想到的兩種可能性:

1)您的搜索字符串'X & Y'包含的字符和字母之間的空格數量與數據庫不同。 2)關於在數據庫(或搜索詞)中編碼文本字符串的事情正在發生,數據實際上說的是X & Y而不是X & Y。在HTML頁面中對&符號進行編碼是很常見的。

請注意,column LIKE '%search-term%'將嚴重惡化。這種搜索不能使用索引。如果此項目旨在擴大規模,您可能需要調查全文搜索。

+0

謝謝,問題出在X & Y.有沒有辦法在MySQL搜索端轉換任何html編碼回到它的正常形式? – GGio 2013-04-05 15:54:20

+0

MySQL不會自動編碼您的數據。這可能是你的應用軟件。訣竅是按照您的軟件將數據編碼到數據庫的方式進行編碼。 MySQL不這樣做,但你的應用程序可以。 – 2013-04-05 15:58:52

+0

明白了,會看看它。我想我有一個想法,可能會出現小故障。再次感謝 – GGio 2013-04-05 16:10:49

相關問題