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

标签 mysql sql collation

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

  1. SELECT * FROM table WHERE names LIKE '%bob%'
  2. 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/

相关文章:

tsql - 瑞典 PC 上的程序员不能编写涉及名为 V 和 W 的变量的 T-SQL 查询吗?

django - Django使用自定义排序规则进行查询

mysql - 如何在 ActiveRecord 查询中包含不属于组子句的字段?

php - MySQL 服务没有运行

sql - 使用 graphviz 显示 SQL 脚本

php - sql排序数字然后按字母顺序

mysql - 查询 bool 值和 if 语句

php - php搜索mysql数据库的一些问题

sql - 特定的纬度/经度落在什么 "road"上?美国人口普查形状文件

MySQL 哪种排序规则可以将西里尔字母和拉丁字母进行比较?