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
)。
v1.3.10