MySQL:查询时 "escape '!'" 是什么意思

MySQL: What does means "escape '!'" on query

编辑别人的代码发现了这个查询:

SELECT c.name AS category_name,
       p.id,
       p.name,
       p.description,
       p.price,
       p.category_id,
       p.created
FROM   products p
       LEFT JOIN categories c
              ON p.category_id = c.id
WHERE  p.name LIKE '%keyword%' escape '!'
        OR p.description LIKE '%keyword%' escape '!'
ORDER  BY p.name ASC
LIMIT  0, 6

除了第 11 行和第 12 行的 escape '!' 之外,我什么都懂。我想这与 'escaping' 相关,如果是,不知道在查询之前是否更好地实现它(代码汤是 PHP)或让工作交给数据库引擎('!' 符号是什么意思?)。

提前致谢。

您不需要在此特定查询中转义,但如果您曾经这样做(即,如果您的搜索字词中有 % 字符),您将需要一个转义字符来区分搜索中的 %在查询的类似部分充当占位符的术语和其他 % 字符。

在这种情况下,您可以使用使用 escape 关键字定义的字符对搜索词中的 % 进行转义。

例如,假设您要在名称字段中查找字符串 25%。你会这样:

WHERE  p.name LIKE '%25!%%' escape '!'

ESCAPE 关键字用于转义模式匹配字符,例如 (%) 百分比和下划线 (_),如果它们构成数据的一部分。

假设我们要检查我们可以使用的字符串“67%”;

LIKE '67#%%' ESCAPE '#';

如果我们要搜索电影“67% Guilty”,我们可以使用下面显示的脚本来执行此操作。

SELECT * FROM movies WHERE title LIKE '67#%%' ESCAPE '#';

注意LIKE子句中的双“%%”,红色的第一个“%”被视为要搜索的字符串的一部分。另一个用于匹配后面任意数量的字符。

如果我们使用像

这样的东西,同样的查询也可以工作
SELECT * FROM movies WHERE title LIKE '67=%%' ESCAPE '=';