MySQL LIKE 模糊查询与通配符使用详解
在 MySQL 中,LIKE 运算符结合通配符可实现灵活的模糊查询,适用于根据部分字符匹配查找数据的场景(如搜索用户名、关键词等)。本文详细讲解 LIKE 的用法、通配符规则及注意事项。
基本语法
1 | SELECT <字段列表> |
LIKE用于判断字段值是否与指定的 “匹配模式” 相符。- 匹配模式需结合通配符使用,否则等价于
=运算符(如name LIKE '张三'等价于name = '张三')。
通配符类型及用法
MySQL 支持两种通配符,用于构建匹配模式:
1. %:匹配任意多个字符(包括 0 个)
- 表示 “任意长度的任意字符”(字母、数字、符号等均可)。
- 可放在模式的任意位置(开头、中间、结尾)。
示例:
1 | -- 1. 字段值包含 'a'(无论位置) |
2. _:匹配任意单个字符
- 表示 “恰好一个任意字符”(必须有且仅有一个)。
示例:
1 | -- 1. 字段值长度为 2,且第二个字符是 'a' |
转义特殊字符
若需匹配包含 % 或 _ 的字段值(如用户名 user_123、discount%),需使用转义字符(默认 \),否则通配符会被解析为匹配规则。
语法:
\_匹配单个_字符。\%匹配单个%字符。
示例:
1 | -- 1. 匹配第二个字符是 '_' 的字段值(如 'a_b'、'x_y') |
注意事项
区分大小写:
- 匹配规则受字段的校对规则(Collation)影响:
utf8_general_ci(不区分大小写):LIKE '%A%'会匹配'a'、'A'。utf8_bin(区分大小写):LIKE '%A%'仅匹配'A',不匹配'a'。
- 匹配规则受字段的校对规则(Collation)影响:
性能影响:
LIKE '%xxx'(以通配符开头)会导致索引失效,触发全表扫描(大数据表慎用)。- 优化建议:若需前缀匹配,使用
LIKE 'xxx%'(可利用前缀索引);复杂模糊查询可考虑全文索引(FULLTEXT)。
NULL 值处理:
LIKE无法匹配NULL值(NULL LIKE ‘%’返回FALSE),需单独用IS NULL判断:
1
SELECT * FROM user WHERE name LIKE '%a%' OR name IS NULL;
常见使用场景
- 关键词搜索:如 “查询标题包含‘MySQL’的文章”。
- 格式匹配:如 “查询手机号以 138 开头的用户”(
LIKE '138%')。 - 模糊过滤:如 “查询用户名第二个字符是数字的用户”(
LIKE '_[0-9]%',需结合正则时用REGEXP)。