LIKE操作符用于模糊查询,%匹配任意字符(含零个),_匹配单个字符,ESCAPE定义转义符处理字面值,BINARY控制大小写敏感,结合通配符可实现灵活字符串搜索。

在 mysql 中,LIKE 操作符用于在 WHERE 子句中进行模糊匹配。配合通配符,可以灵活地查找符合特定模式的字符串数据。常用的通配符有两个:% 和 _(下划线)。
% 通配符:匹配任意数量的字符(包括零个字符)
% 表示任意长度的任意字符序列,可以是0个、1个或多个字符。
例如:
- select * FROM users WHERE name LIKE ‘a%’; —— 匹配以 “a” 开头的所有名字,如 “alice”、”alex”、”andrew”。
- SELECT * FROM users WHERE name LIKE ‘%son%’; —— 匹配名字中包含 “son” 的记录,如 “Johnson”、”Jackson”。
- SELECT * FROM users WHERE name LIKE ‘%y’; —— 匹配以 “y” 结尾的名字,如 “Mary”、”Lily”。
_ 通配符:匹配单个字符
_ 只匹配一个任意字符。常用于已知字符串长度但部分字符不确定的情况。
例如:
- SELECT * FROM users WHERE name LIKE ‘A_e’; —— 匹配三个字母、以 A 开头、e 结尾,中间一个任意字符的名字,如 “Abe”、”Ade”。
- SELECT * FROM phone WHERE number LIKE ‘138__0_78’; —— 匹配像 ‘13812078’ 这样格式的号码,每个 _ 对应一位数字。
转义特殊字符:使用 ESCAPE 关键字处理 _ 和 % 字面值
如果你想查找实际包含 _ 或 % 的字符串(比如用户昵称中有下划线),需要使用 ESCAPE 来定义转义字符。
例如,查找用户名中包含下划线 “_” 的记录:
- SELECT * FROM users WHERE name LIKE ‘%_%’ ESCAPE ”; —— 使用反斜杠 作为转义字符,_代表字面的下划线。
- SELECT * FROM users WHERE name LIKE ‘%%%’ ESCAPE ”; —— 查找包含百分号 % 的名字。
你也可以用其他字符作为转义符,比如:
SELECT * FROM files WHERE filename LIKE ‘%!_txt%’ ESCAPE ‘!’; —— 这里 ! 代表转义,!_ 表示真实的下划线。
大小写敏感性说明
MySQL 的 LIKE 默认是否区分大小写,取决于字段的排序规则(collation)。如果是 utf8mb4_general_ci 或类似后缀为 _ci(case insensitive)的,则不区分大小写;若为 _cs 或 _bin,则可能区分。
如需强制区分大小写,可使用 BINARY:
SELECT * FROM users WHERE name LIKE BINARY ‘Alice%’; —— 只匹配首字母大写的 Alice 开头的名字。
基本上就这些。掌握 % 和 _ 的用法,再了解如何转义和控制大小写,就能高效使用 LIKE 实现各种模糊查询需求。