我有一个带有名称列的图像表。 name列中的值可能包含百分号,在使用like运算符时,它本身就是一个通配符。我目前在名称列中有以下相关值:“a%”和“blah%blah”。
执行时,我没有按预期得到任何结果:
select name from image where name like '\%'
执行以下操作时,我得到上述两条记录:
select name from image where name like '%\%'
我理解为什么我以“a%”作为名称获取记录。但是,我不明白为什么我会得到“等等。”如果“blah%blah”有一个百分比字符作为最后一个字符,那就没有意义,但事实并非如此。
我在这里做错了还是这个MySQL错误?
答案 0 :(得分:1)
如this错误中所述,您需要使用另一种排序规则作为解决方法:
使用utf8_unicode_ci colation :
CREATE TABLE image
(`id` int, `name` varchar(55) collate utf8_unicode_ci)
;
INSERT INTO image
(`id`, `name`)
VALUES
(1, 'a%'),
(2, 'blah%blah')
;
查询1 :
SELECT
name
FROM
image
WHERE name like '%\%'
<强> Results 强>:
| name |
|-----------|
| a% |
| blah%blah |
使用utf8_general_ci整理:
CREATE TABLE image
(`id` int, `name` varchar(55) collate utf8_general_ci)
;
INSERT INTO image
(`id`, `name`)
VALUES
(1, 'a%'),
(2, 'blah%blah')
;
查询1 :
SELECT
name
FROM
image
WHERE name like '%\%'
<强> Results 强>:
| name |
|------|
| a% |