2015-06-10 57 views
3

我有一個名稱列的圖像表。名稱列中的值可能包含百分號,在使用類似運算符時,該百分號本身是通配符。我目前在名稱列中有以下相關值:「a%」和「blah%blah」。轉義'%'字符時出現問題

我沒有得到任何結果,一如預期,在執行時:

select name from image where name like '\%' 

當執行下,我得到的上述記錄2:

select name from image where name like '%\%' 

我明白爲什麼我我以「a%」作爲名字獲得了記錄。然而,我不明白我爲什麼會得到「等等等等」。如果「blah%blah」有一個百分比字符作爲最後一個字符,這將是有意義的,但事實並非如此。

我在這裏做錯了什麼,或者這是MySQL的錯誤?

+0

可以爲用戶提供這種行爲的SQLFiddle?我無法在我的系統上重現這一點(mysql Ver 15.1 Distrib 10.0.19-MariaDB,對於使用EditLine wrapper的Linux(x86_64))。 – Mureinik

+1

http://sqlfiddle.com/#!9/8b836f/1 – sqluser

+0

試試這個:'WHERE name like'%\ %%'' –

回答

1

this錯誤描述,你需要使用其它歸類爲一種變通方法:

SQL Fiddle

使用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 | 

SQL Fiddle

使用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% | 
+0

謝謝。我想這可能是一個錯誤,但無法找到它。至少我知道我的灰色單元邏輯電路工作正常。 – Jonathan