现有如下一张表test
| id | name |
|---|---|
| 1 | \ |
| 2 | \\ |
| 3 | \\\ |
1. 精确匹配时
需要在sql语句中用 \\ 来匹配 \
例如 select * from test where name = '\\' 即可查到 id 为1 的数据
2. 使用Like 模糊匹配时
需要在sql语句中用 \\\\ 来匹配 \
例如 select * from test where name like '% \\\\ %' 可以查到id为 1,2,3 的三条数据
select * from test where name like '% \\\\\\\\ %'可以查到id为2,3的两条数据
select * from test where name like '% \\\\\\\\\\\\ %'可以查到id为3的一条数据
原因
在MySQL中,反斜杠在字符串中是转义字符,在进行语法解析时会进行一次转义,当使用精确匹配或者insert语句时,"\\" 在数据库中会被转义一次,最终只会存储"\"。而在MySQL的like语法中,like后边的字符串除了会在语法解析时转义一次外,还会在正则匹配时进行第二次的转义。因此如果期望最终匹配到"\",就要反转义两次,也即由"\\\\"到"\\"再到"\"