吖,以前我还没碰见过,为了这个问题,我还专门去看了一下手册,查询一个\,是必须用\\\\。
原文如下:
因为 MySQL 在字符串中使用的是 C 的转义句法(例如 “/n”),
所以在 LIKE 字符串中使用的任何一个 “/” 必须被双写。
例如,为了查找 “/n”,必须以 “//n” 形式指定它。为了查找 “/”,必须指定它为 “”
(反斜线被语法分析器剥离一次,另一次在模式匹配时完成,留下一条单独的反斜线被匹配)。
mysql> SELECT * FROM `ta` WHERE `memo` = 'a//';
mysql> SELECT * FROM `ta` WHERE `memo` LIKE 'a';
+----+------+
| id | memo |
+----+------+
| 1 | a/ |
+----+------+
# 在 LIKE 子句中,为了查找 “/”,必须指定它为 “”
mysql> SELECT * FROM `ta` WHERE `memo` = 'a';
mysql> SELECT * FROM `ta` WHERE `memo` LIKE 'a';
+----+------+
| id | memo |
+----+------+
| 2 | a// |
+----+------+
# 在 LIKE 子句中,为了查找 “/”,必须指定它为 “”
mysql> SELECT * FROM `ta` WHERE `memo` = 'a//n';
mysql> SELECT * FROM `ta` WHERE `memo` LIKE 'an';
+----+------+
| id | memo |
+----+------+
| 3 | a/n |
+----+------+
# 在 LIKE 子句中,为了查找 “/”,必须指定它为 “”
字符转移是递归处理的,看看:
原始:an
第一次 a//n
第二次 a/n
又如:a//n
第一次 an
第二次 a//n
第三次 a/n
直到/没有可以匹配的转移字符为止。//,这种情况会不停的转是因此/这个字符的二进制编码造成的。你可以说是bug,但是就是那么回事。
对/的处理要经过3次转义