如題,當SQL語句中使用Like查詢,且期望匹配的結果中含有"\"的,應當把"\"替換為"\\\\"。
比如數據庫中text字段有以下三行:
id text
1 au1224 su5b9e1u9a8c
2 \24\a su5b9e1u9a8c
3 \24\\a su5b9e1u9a8c
當我們使用下面這三種方式查詢時,都會得到id 為1,2,3三行,原因后面會講。
select * from test_table where text like "%\24%";
select * from test_table where text like "%\\24%";
select * from test_table where text like "%\\\24%";
只有像下面這樣使用四個反斜杠"\\\\"查詢時,才會得到期望的包含"\24"的結果(id為2、3的兩行)。
select * from test_table where text like "%24\\\\%";
進一步,如果期望查詢到的結果更准確,比如只得到id為2的第二行,應該像下邊這樣查詢。
select * from test_table where text like "%24\\\\a%";
同理,只得到id為3的第三行,匹配兩個反斜杠"\\",應該使用八個反斜杠"\\\\\\\\":
select * from test_table where text like "%24\\\\\\\\a%";
原因其實很簡單,在mysql中,反斜杠在字符串中是轉義字符,在進行語法解析時會進行一次轉義,所以當我們在insert字符時,insert "\\" 在數據庫中最終只會存儲"\"。而在mysql的like語法中,like后邊的字符串除了會在語法解析時轉義一次外,還會在正則匹配時進行第二次的轉義。因此如果期望最終匹配到"\",就要反轉義兩次,也即由"\"到"\\"再到"\\\\"。
原文鏈接:https://blog.csdn.net/mrqingyu/article/details/81004580