除性能外,这两个查询的结果是否存在差异?
SELECT * FROM pet WHERE name LIKE 'Spot';
SELECT * FROM pet WHERE name = 'Spot';
我问的原因是真实的脚本将类似于以下内容,API用户负责提出模式。更常见的情况是,不会提供LIKE模式,但总是有可能只提供一个字符串,从而产生SELECT * FROM pet WHERE name LIKE "Spot"
。
$stmt = $this->pdo->prepare('SELECT * FROM pet WHERE name LIKE ?');
$stmt->execute([$_GET['name']]); //Spot
return [$stmt->fetchAll(),200];
答案 0 :(得分:3)
在练习中,没有通配符的LIKE
在功能上等同于=
。但是,他们不一样!明显不同的是,=
不会以任何特殊方式处理\
,%
和_
,但LIKE
会这样做。
documentation非常明确:
根据SQL标准,
LIKE
基于每个字符执行匹配, 因此它可以产生与=比较运算符不同的结果:
除了排序规则差异外,尾随空格很重要:
特别是,尾随空格很重要,但事实并非如此 使用=运算符执行
CHAR
或VARCHAR
次比较:
实际上,被比较的字符串通常具有相同的排序规则,没有尾随空格,并且忽略了特殊字符,因此LIKE
有时用作=
的替代(特别是因为在模式开头没有通配符的LIKE
也可以使用索引。
答案 1 :(得分:1)
实际上,事实证明在你的例子中它是相同的,但这里有更多信息:
来自another stackoverflow answer
=是一个对数字和字符串进行操作的比较运算符。比较字符串时,比较运算符会比较整个字符串。
LIKE是一个字符串运算符,用于逐字符比较。