gpt4 book ai didi

带有通配符和反斜杠的 MySQL LIKE 运算符

转载 作者:可可西里 更新时间:2023-11-01 06:49:09 25 4
gpt4 key购买 nike

它对 MySQL 在 LIKE 运算符中使用的模式转义感到沮丧。

root@dev> create table foo(name varchar(255));
Query OK, 0 rows affected (0.02 sec)

root@dev> insert into foo values('with\\slash');
Query OK, 1 row affected (0.00 sec)

root@dev> insert into foo values('\\slash');
Query OK, 1 row affected (0.00 sec)

root@dev> select * from foo where name like '%\\\\%';
Empty set (0.01 sec)

root@dev> select * from foo;
+------------+
| name |
+------------+
| with\slash |
| \slash |
+------------+
2 rows in set (0.00 sec)

root@dev> select * from foo where name like '%\\\\%';
Empty set (0.00 sec)

root@dev> 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

最佳答案

在 MySQL 5.6.10 中,使用文本字段排序规则 utf8mb4_unicode_520_ci 这可以通过使用 5 个反斜杠字符而不是 4 个来实现,即:

select * from foo where name like binary '%\\\\\%';

不知何故,出乎所有人的意料,这正确地找到了所有带反斜杠的行。至少在上面的 MySQL 字段排序错误被修复之前,这应该有效。考虑到自发现错误以来已经超过 5 年,任何使用此设计的应用程序可能在 MySQL 修复之前就不再有用 - 因此应该是一个非常可靠的解决方法。

关于带有通配符和反斜杠的 MySQL LIKE 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8583144/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com