1

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

  1. SELECT * FROM table WHERE names LIKE '%bob%'
  2. SELECT * FROM table WHERE locate('bob', names)

我第一次学会使用 LIKE,但我遇到了“Illegal mix of collat​​ions..”错误,说我正在比较英语(拉丁语)和​​汉语(big5)。在搜索修复排序规则问题的方法时,我遇到了 locate(),当我尝试它时它并没有抱怨排序规则。只是想知道我是否可以继续使用 locate() 或者它是否有任何缺点。

4

2 回答 2

1

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

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

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

另一个优点like是它支持初始匹配 ( 'y%') 和最终匹配 ( '%y') 以及中间匹配。一种方法适用于所有三种。using 的等效语句locate更复杂。

我的偏好是使用like,尤其是因为它的可移植性。但是,我通常不会面对处理不同的字符集。您可能最好学习MySQL 中的排序规则,而不是尝试找到解决方法。

于 2013-03-24T23:40:24.540 回答
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

于 2013-03-24T23:42:35.973 回答