Mysql like查询语句中,结果包含反斜杠 \ 字符的,需要替换成四个反斜杠 \\\\

    如题,当SQL语句中使用Like查询,且期望匹配的结果中含有”\”的,应当把”\”替换为”\\\\”。

    比如数据库中text字段有以下三行:

当我们使用下面这三种方式查询时,都会得到id 为1,2,3三行,原因后面会讲。

只有像下面这样使用四个反斜杠”\\\\”查询时,才会得到期望的包含”\24″的结果(id为2、3的两行)。

进一步,如果期望查询到的结果更准确,比如只得到id为2的第二行,应该像下边这样查询。

同理,只得到id为3的第三行,匹配两个反斜杠”\\”,应该使用八个反斜杠”\\\\\\\\”:

原因其实很简单,在mysql中,反斜杠在字符串中是转义字符,在进行语法解析时会进行一次转义,所以当我们在insert字符时,insert “\\” 在数据库中最终只会存储”\”。而在mysql的like语法中,like后边的字符串除了会在语法解析时转义一次外,还会在正则匹配时进行第二次的转义。因此如果期望最终匹配到”\”,就要反转义两次,也即由”\”到”\\”再到”\\\\”。

Hello world

你好世界!

こんにちは世界

Ciao mondo

Привет мир

Bonjour le monde

안녕 세상

Hallo Welt

Olá mundo

Hola Mundo

Γειά σου Κόσμε

Salut Lume

สวัสดีชาวโลก

Hej världen

salve mundi

Hai dunia

 

神毁灭了一座巴别塔,也许我们可以用计算机再建造一座。

God destroyed the Tower of Babel. Maybe we can build another one with the computer.