我正在尝试编写查询以查找包含子字符串的字符串。以下两种方法有什么区别?
SELECT * FROM table WHERE names LIKE '%bob%'
SELECT * FROM table WHERE locate('bob', names)
我第一次学会使用LIKE,但我有“非法混合排序......”错误说我正在比较英语(拉丁语)和中文(big5)。虽然谷歌搜索方法来修复整理问题我遇到了locate(),当我尝试它时,它没有抱怨整理。只是想知道我是否可以继续使用locate()或者它是否有任何缺点。
答案 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