Mysql 需要匹配内容中的"\"的处理

191 阅读1分钟

现有如下一张表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后边的字符串除了会在语法解析时转义一次外,还会在正则匹配时进行第二次的转义。因此如果期望最终匹配到"\",就要反转义两次,也即由"\\\\"到"\\"再到"\"