2013-03-11 62 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

相关问题