MySQL LIKE operator with wildcard and backslash

淺唱寂寞╮ 提交于 2019-12-04 05:36:11

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.

Darren Bailey

With MySQL 5.0.12 dev on Windows 10 I got the following results when I changed the query from

SELECT * FROM `foo` WHERE `name` LIKE '%http:\/\/%'

to

SELECT * FROM `foo` WHERE `name` LIKE '%http:\\\\\\\%'

it works and yet the first string with forward slashes was the original field content. It seems to have interpreted forward slashes as backslashes.

It seems it has some relation to that MySQL bug: http://bugs.mysql.com/bug.php?id=46659

I think you connect to mysql not specifying correct --character-set-server option (which defaults to latin1 with collation latin1_swedish_ci), and having utf-8 as the current charset of the console. That causes incorrect char conversions and comparisons when you deal with data which supposed to be converted to the utf8 from the charset of --character-set-server.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!