like mysql 相反,具有通配符和反斜杠的MySQL LIKE运算符

It's frustrated with MySQL's pattern escaping used in LIKE operator.

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)

EDIT:

The database I'm testing that in has character_set_database set to utf8. To further my investigation, I created the same setup in a database that has character_set_database set to latin1, and guess what, '%\\\\%' works!

EDIT:

The problem can be reproduced and it's the field collation problem. Details: http://bugs.mysql.com/bug.php?id=63829

解决方案

In MySQL 5.6.10, with the text field collation utf8mb4_unicode_520_ci this can be achieved by using 5 backslash characters instead of 4, i.e:

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

Somehow, against all expectations, this properly finds all rows with backslashes.

At least this should work until the MySQL field collation bug above is fixed. Considering it's been more than 5 years since the bug is discovered, any app designed with this may outlive its usefulness before MySQL is even fixed - so should be a pretty reliable workaround.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值