Он расстроен с помощью экранирования шаблона MySQL, используемого в операторе LIKE.Оператор MySQL LIKE с подстановочным знаком и обратной косой чертой
[email protected]> create table foo(name varchar(255));
Query OK, 0 rows affected (0.02 sec)
[email protected]> insert into foo values('with\\slash');
Query OK, 1 row affected (0.00 sec)
[email protected]> insert into foo values('\\slash');
Query OK, 1 row affected (0.00 sec)
[email protected]> select * from foo where name like '%\\\\%';
Empty set (0.01 sec)
[email protected]> select * from foo;
+------------+
| name |
+------------+
| with\slash |
| \slash |
+------------+
2 rows in set (0.00 sec)
[email protected]> select * from foo where name like '%\\\\%';
Empty set (0.00 sec)
[email protected]> select * from foo where name like binary '%\\\\%';
+------------+
| name |
+------------+
| with\slash |
| \slash |
+------------+
2 rows in set (0.00 sec)
Согласно MySQL документации: http://dev.mysql.com/doc/refman/5.5/en/string-comparison-functions.html#operator_like%\\\\%
является правый операнд, но почему она не дает никакого результата?
EDIT: База данных, в которой я тестирую, имеет значение character_set_database для utf8. Чтобы продолжить мое исследование, я создал ту же настройку в базе данных, которая имеет character_set_database, установленную на latin1, и угадайте, что работает '%\\\\%'
!
EDIT: Проблема может быть воспроизведена, и это проблема сопоставления полей. Реквизиты: http://bugs.mysql.com/bug.php?id=63829
Когда я использую ваши команды точно, 'select * from foo, где имя типа '% \\\\%';' работает для меня. Я не понимаю, почему это не работает для вас, мне любопытно узнать. –
Возможно, это связано с кодировкой базы данных. Я обновил оригинальный пост. – EnToutCas
Проверьте: - 'select @@ session.sql_mode; select @@ global.sql_mode; ' – ajreal