我正在尝试编写一个查询来查找包含子字符串的字符串。下面两种方法有什么区别?
SELECT * FROM table WHERE names LIKE '%bob%'
SELECT * FROM table WHERE locate('bob', names)
我第一次学习使用 LIKE,但我遇到了“非法混合排序规则..”错误,说我正在比较英语 (latin) 和中文 (big5)。在谷歌搜索修复排序规则问题的方法时,我遇到了 locate(),当我尝试它时它没有提示排序规则。只是想知道我是否可以继续使用 locate() 或者它是否有任何缺点。
最佳答案
在很大程度上,这是一个品味问题。
最重要的考虑因素是 like
是 ANSI 标准 SQL,并且被大多数(如果不是全部)数据库支持。 locate
是 MySQL 特有的,因此不一定可以移植到其他数据库。
某些数据库优化表达式 x like 'y%'
以使用索引。 MySQL 没有,所以这不是您要考虑的问题。
like
的另一个优点是它支持初始匹配 ('y%'
) 和最终匹配 ('%y'
) 作为以及中间比赛。一种方法适用于所有三种方法。使用 locate
的等效语句更为复杂。
我更喜欢使用like
,尤其是因为它的可移植性。但是,我通常不会遇到处理不同字符集的问题。你可能会过得更好learning about collations在 MySQL 中而不是试图找到解决方法。
关于mysql - sql 使用 LIKE vs locate() 搜索子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15604946/