首页/数据/SQL 速查/LIKE 通配符与 ESCAPE 转义
函数速查60 条

LIKE 通配符与 ESCAPE 转义

LIKE 里 % 与 _ 是通配符:搜索字面量 % / _ 必须转义;用 ESCAPE 子句显式指定转义符比依赖反斜杠更清晰。

SQL 速查数据更新于 2026-10-13

LIKE 转义是什么

LIKE 里 % 与 _ 是通配符,要搜索字面量的百分号、下划线或转义符本身就必须转义。标准做法是用 ESCAPE 子句显式指定一个转义符,例如 LIKE '100!%' ESCAPE '!'。MySQL 默认把反斜杠当作 LIKE 的转义符,可以省略 ESCAPE,但反斜杠在很多编程语言与字符串字面量里本身也需要转义,叠加后容易出错;PostgreSQL 与标准一致,没有默认转义符,必须显式写 ESCAPE。要匹配转义符本身时把它连写两次。

基本信息

通配符% 匹配任意长度,_ 匹配恰好一个字符
MySQL 默认反斜杠为默认转义符,可省略 ESCAPE
PostgreSQL 默认没有默认转义符,必须显式写 ESCAPE
显式写法LIKE '100!%' ESCAPE '!'
匹配转义符本身连写两次,例如 ESCAPE '!' 下写 '!!'
大小写取决于排序规则:MySQL 默认不区分,PostgreSQL 区分

典型使用场景

  • 搜索含百分号的内容:折扣率、完成度这类带 % 的文本
  • 搜索含下划线的编码:SKU、变量名、文件名
  • 清洗含反斜杠的数据:Windows 路径与转义文本
  • 参数化查询里拼 LIKE:用户输入的通配符必须转义
  • 跨库迁移 SQL:MySQL 省略 ESCAPE 的写法搬到 PostgreSQL 会失效
  • 导入校验:过滤掉异常字符组成的记录

示例

示例
-- 搜索字面量百分号
SELECT * FROM rates WHERE label LIKE '100!%' ESCAPE '!';

-- 搜索字面量下划线
SELECT * FROM codes WHERE code LIKE 'A!_1' ESCAPE '!';

-- 搜索字面量感叹号本身:写两次
SELECT * FROM notes WHERE body LIKE '%!!%' ESCAPE '!';

-- MySQL 依赖默认反斜杠(不建议跨库复用)
SELECT * FROM rates WHERE label LIKE '100\%';
-- PostgreSQL 同样写法需要显式声明
SELECT * FROM rates WHERE label LIKE '100!%' ESCAPE '!';

转义行为对照

场景MySQLPostgreSQL
默认转义符反斜杠无,需 ESCAPE 指定
匹配 %LIKE '100\%'LIKE '100!%' ESCAPE '!'
匹配 _LIKE 'A\_1'LIKE 'A!_1' ESCAPE '!'
匹配转义符本身'\\''!!'(以 ! 为例)
大小写敏感默认不敏感默认敏感
应用层拼 LIKE 时不要直接把用户输入塞进去:先转义输入里的 %、_ 与转义符,再套上自己的通配符,避免用户输入被当成模式。
ESCAPE 的字符选择要避开数据里常见字符:选 ! 或 # 比较容易,选反斜杠要留意多层转义。
依赖 MySQL 默认反斜杠转义的 SQL 迁移到 PostgreSQL 后会静默改变匹配范围,迁移前统一改成显式 ESCAPE 写法。

使用要点

  • 显式写 ESCAPE,跨库与跨版本的写法保持一致
  • 转义符选数据里少见的字符,减少二次转义
  • 使用参数化查询,转义在应用层完成,SQL 里只留占位符
  • 匹配转义符本身要连写两次,写完用样例数据验证
  • 注意大小写敏感差异,PostgreSQL 需要 ILIKE 或调整排序规则
  • 模糊匹配结果用于展示时限制条数,避免一次返回大量数据

易错点

  • 用户输入里的 % 与 _ 未转义,匹配范围被意外放大甚至命中全部记录
  • 从 MySQL 迁到 PostgreSQL 时沿用默认反斜杠写法,静默改变匹配结果
  • 转义符本身没有连写两次,搜索结果为空却以为数据不存在
  • 在应用层与 SQL 层重复转义,实际搜索的字符串与预期不同
  • 忽略两库大小写默认行为差异,同一 SQL 在两个环境返回不同结果

数据来源与参考

  • MySQL 8.0 Reference Manual · Pattern Matching
  • PostgreSQL Documentation · LIKE
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌