2013-03-11 61 views
1

我有一個問題,什麼是在一列中查找確切的字符串匹配的最佳方式。如何在一個mysql列中查找確切的字符串

我試過使用locate('needle', 'haystack') > 0.這個問題是,例如,如果我試圖找到的字符串是'Ed',但是在blob或文本列中,我有一個字符串'I live' ,locate()會返回6.但是,這不是我所要求的。完全匹配時,最好使用LIKE '',但LIKE存在性能問題,因此它不是一個可行的解決方案。

有沒有一種方法我使用LOCATE()做一個完全匹配?

+0

你說LIKE有性能問題,但是你不打算通過使用一個完全像LIKE那樣的函數來解決性能問題。 – 2013-03-11 21:08:29

+0

您使用'LIKE'時遇到了哪些性能問題,而您沒有使用'LOCATE'?這兩種方法都會混淆任何索引,所以它們應該表現相當 - [並且基於這個答案,'LIKE'略微超出了'LOCATE'](http://stackoverflow.com/a/7500150/643591)。 – 2013-03-11 21:08:52

回答

3

您可以使用此:

WHERE CONCAT(' ', column, ' ') LIKE BINARY '% string_to_find %' 

或使用LOCATE:

WHERE LOCATE(BINARY ' Ed ', CONCAT(' ', column, ' ')) 

使用二進制將迫使一個確切的情況下匹配。我認爲LOCATE或LIKE的表現會非常相似。請參閱小提琴here

+0

謝謝!這實際上起作用。我不知道如何連接列值周圍的空白。這給了我更高的找到匹配的可能性。 再次感謝。 – ericg 2013-03-14 15:23:00

相關問題