Thật thất vọng với việc thoát mẫu của MySQL được sử dụng trong toán tử LIKE.Toán tử MySQL LIKE với ký tự đại diện và dấu gạch chéo ngược
[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)
Theo tài liệu MySQL: http://dev.mysql.com/doc/refman/5.5/en/string-comparison-functions.html#operator_like %\\\\%
là toán hạng phải, nhưng tại sao nó không đạt kết quả?
EDIT: Cơ sở dữ liệu tôi đang thử nghiệm trong đó có character_set_database được đặt thành utf8. Để tiếp tục điều tra của tôi, tôi đã tạo cùng một thiết lập trong cơ sở dữ liệu có ký tự character_set_database được đặt thành latin1 và đoán công thức nào, '%\\\\%'
hoạt động!
EDIT: Sự cố có thể được sao chép và đó là vấn đề đối chiếu trường. Thông tin chi tiết: http://bugs.mysql.com/bug.php?id=63829
Khi tôi sử dụng lệnh của bạn chính xác, 'chọn * từ foo nơi tên giống như '% \\\\%';' hoạt động cho tôi. Tôi đang ở một mất mát là tại sao nó không làm việc cho bạn mặc dù, tôi tò mò muốn biết. –
Nó có thể có một cái gì đó để làm với bộ ký tự cơ sở dữ liệu. Tôi đã cập nhật bài đăng gốc. – EnToutCas
Kiểm tra điều này: - 'select @@ session.sql_mode; chọn @@ global.sql_mode; ' – ajreal