Это работает для меня с 6 обратной косой чертой при использовании левого подстановочного знака:
mysql> SELECT * FROM `tmptest` WHERE `a` LIKE '%\\\\\\n%';
+-----------------+
| a |
+-----------------+
| \n |
| \n\ndfsdfsdfs\n |
+-----------------+
2 rows in set (0.00 sec)
Использование mysqld Ver 5.1.49
@ Karolis, насколько я понимаю, выражение для оператора LIKE
должно быть проанализировано дважды, поэтому \\\\
превращается в \
при использовании с LIKE.
Но как это объяснить (используя выражение "back \ slash"):
SELECT 'back\\slash' LIKE '%back\\\\slash%';
-> TRUE (нормальное поведение)
SELECT 'back\\slash' LIKE '%back\\\\\slash%';
-> TRUE (5 обратных слэшей?)
SELECT 'back\\slash' LIKE '%back\\\\\\slash%';
-> TRUE (6 обратных слэшей?)
SELECT 'back\\slash' LIKE '%back\\\\\\\slash%';
-> TRUE (7 обратных слэшей?)
SELECT 'back\\slash' LIKE '%back\\\\\\\\slash%';
-> FALSE (нормальное поведение, я думаю ..)
Тем не менее, если вы ищете только "\":
mysql> SELECT 'back\\slash' LIKE '%\\\\%';
-> FALSE (но должно работать)
mysql> SELECT 'back\\slash' LIKE '%\\\\\%';
-> TRUE (5 обратных слэшей)
mysql> SELECT 'back\\slash' LIKE '%\\\\\\%';
-> TRUE (6 обратных слэшей)
mysql> SELECT 'back\\slash' LIKE '%\\\\\\\%';
-> FALSE (7 обратных слэшей)
Для этого конкретного вопроса можно использовать другой escape-символ |
и вообще обойти проблему (если не встречается |
символ):
mysql> SELECT 'back\\slash' LIKE '%\\%' ESCAPE '|';
-> ИСТИНА
Так что, возможно, какой-нибудь гуру mysql сможет это объяснить. Я просто не могу. также протестирован с mysql 5.1.53 на другой машине. Такое же поведение наблюдалось. Как я начал комментировать, это довольно интересный вопрос.