在 MySQL 的模糊查询中,反斜杠 \
的转义规则需要根据 转义层级 和 SQL 模式 来确定。以下是详细说明及示例:
一、默认模式下(未启用 NO_BACKSLASH_ESCAPES
)
1. 规则说明
-
反斜杠转义:
\
是 MySQL 的默认转义字符。 -
转义层级:
-
编程语言层转义(如 Java、Python、Go):字符串中的
\
需要转义为\\
。 -
MySQL 层转义:传递到 SQL 中的
\\
会被解释为单个\
。
-
2. 示例场景
实际目标字符 | 编程语言中的字符串 | 最终 SQL 中的模式 | 匹配的文本 |
---|---|---|---|
单个 \ | "a\\\\b" | a\\b | a\b |
两个 \\ | "a\\\\\\\\b" | a\\\\b | a\\b |
匹配 \de | "%\\\\de%" | %\\de% | abc\de 或 \de123 |
二、启用 NO_BACKSLASH_ESCAPES
模式
1. 规则说明
-
禁用反斜杠转义:
\
不作为转义字符,直接视为普通字符。 -
转义方式:需使用其他转义符(如
ESCAPE '$'
自定义转义符)。
2. 示例场景
实际目标字符 | SQL 模式(自定义转义符) | 匹配的文本 |
---|---|---|
单个 \ | LIKE 'a$%b' ESCAPE '$' | a%b |
匹配 \de | LIKE '%\\de%' (直接写 \ ) | \de |
三、关键总结
1. 默认模式下的反斜杠数量规则
目标字符 | 编程语言中的字符串 | SQL 模式 | 说明 |
---|---|---|---|
\ | "\\\\" | \\ | 两层转义(代码层 + SQL层) |
\\ | "\\\\\\\\" | \\\\ | 四个反斜杠变为两个 |
2. 常见误区
-
误用单层转义:直接写
LIKE 'a\b'
,实际匹配的是a b
(\b
被转义为退格符)。 -
忽略编程语言转义:在代码中拼接字符串时未正确处理
\
。
3. 验证工具
-
使用
HEX()
函数查看实际存储的二进制数据:SELECT HEX(word) FROM table WHERE ...;
-
\
的 Hex 值为5C
。
-
四、实战案例
场景1:查询文件名中的反斜杠
-- 目标:匹配 "C:\Program Files\MySQL\" -- 正确写法(默认模式) SELECT * FROM files WHERE path LIKE 'C:\\\\Program Files\\\\MySQL\\\\%';
场景2:查询包含 \n
的文本
-- 错误写法(匹配换行符) SELECT * FROM logs WHERE content LIKE '%\\n%'; -- 正确写法(匹配字面量 "\n") SELECT * FROM logs WHERE content LIKE '%\\\\n%';
五、转义规则总结
场景 | 默认模式 | NO_BACKSLASH_ESCAPES 模式 |
---|---|---|
匹配单个 \ | LIKE '\\\\' | LIKE '\\' |
匹配 \de | LIKE '\\\\de%' | LIKE '\\de%' |
自定义转义符(如 $ ) | 无需使用 | LIKE 'a$%b' ESCAPE '$' |
通过理解转义层级和 SQL 模式,可精准控制模糊查询中的反斜杠匹配逻辑。