在LIKE運算符中使用MySQL的模式轉義令人沮喪。使用通配符和反斜槓的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 %\\\\%
是正確的操作數,但爲什麼它的產量沒有結果?
編輯: 我測試的數據庫中的character_set_database設置爲utf8。爲了進一步調查,我在character_set_database設置爲latin1的數據庫中創建了相同的設置,並猜測'%\\\\%'
的工作原理!
編輯: 該問題可以重現,它是現場整理問題。詳細信息:http://bugs.mysql.com/bug.php?id=63829
當我完全使用你的命令時,'select * from foo'名稱'%\\\\%';'適用於我。儘管我不明白爲什麼它不適合你,但我很遺憾,我很想知道。 –
它可能與數據庫字符集有關。我已更新原始帖子。 – EnToutCas
選中此項: - 'select @@ session.sql_mode; select @@ global.sql_mode;' – ajreal