概述
通常在业务中会用正则/like
去匹配一些数据.如果数据中有反斜杠,或者是用的正则语句。
那么在写sql
的时候就需要转义下反斜杠,转义的时候有几个隐藏问题需要注意。
使用like做where条件
如下使用like
要查询这两条数据的时候,需要用8
个反斜杠。
首先在经过mysql
语法解析器的时候会转义一下,第一个反斜杠被当做转义字符,然后会去掉
然后在like
执行的时候又会解析一下转义字符
总共转义了2
次,也就是4
个反斜杠经过2
次转义后,只剩下2
个反斜杠。
如果where
中直接使用=
,那么只会经过语法解析器的转义
mysql> SELECT * from student where text like '%\\\\\\\\%';
+----+-----------------------+
| id | text |
+----+-----------------------+
| 4 | D:\\666\\7777777 |
| 5 | D:\\123\\456444 |
+----+-----------------------+
2 rows in set (0.00 sec)
where
中直接使用=
mysql> SELECT * from student where text = '\\\\';
+----+------+
| id | text |
+----+------+
| 7 | \\ |
+----+------+
1 row in set (0.00 sec)
在select中使用regexp
如下demo中,只经过了mysql
的语法解析器的转义,所以只用转义1次
即可
select
'110.500' regexp '^\\d+(\\.0+){0,}$',
'110.0' regexp '^\\d+(\\.0+){0,}$',
'110' regexp '^\\d+(\\.0+){0,}$'