使用LIKE vs locate()搜索子字符串

时间:2013-03-24 22:41:14

标签: mysql sql collation

我正在尝试编写查询以查找包含子字符串的字符串。以下两种方法有什么区别?

  1. SELECT * FROM table WHERE names LIKE '%bob%'
  2. SELECT * FROM table WHERE locate('bob', names)
  3. 我第一次学会使用LIKE,但我有“非法混合排序......”错误说我正在比较英语(拉丁语)和​​中文(big5)。虽然谷歌搜索方法来修复整理问题我遇到了locate(),当我尝试它时,它没有抱怨整理。只是想知道我是否可以继续使用locate()或者它是否有任何缺点。

2 个答案:

答案 0 :(得分:0)

在很大程度上,这是一个品味问题。

最重要的考虑因素是like是ANSI标准SQL,并且大多数(如果不是全部)数据库都支持它。 locate特定于MySQL,因此不一定可移植到其他数据库。

某些数据库优化表达式x like 'y%'以使用索引。 MySQL没有,所以这不是你的考虑因素。

like的另一个好处是它支持初始匹配('y%')和最终匹配('%y')以及中间匹配。三种方法之一。使用locate的等效语句更复杂。

我的偏好是使用like,尤其是因为可移植性。但是,我通常不会遇到处理不同字符集的问题。你可能在MySQL中learning about collations比在试图找到解决方法时更好。

答案 1 :(得分:0)

他们根本就没有做同样的事情。 LIKE是一个正在进行文本匹配的运算符,而LOCATE是一个返回第一次出现位置的函数。

http://www.w3resource.com/mysql/string-functions/mysql-locate-function.php http://www.w3resource.com/mysql/string-functions/mysql-like-function.php