2013-05-03 190 views
3

如果我想與在name字段中的字符串léon搜索所有的數據,我用的是這樣的查詢:REGEXP使用MySQL不能正常工作

SELECT * FROM `my_table` WHERE `name` REGEXP 'léon' 

該請求確定。

現在,我需要與串léonleonlèon檢索所有行,所以我嘗試:

SELECT * FROM `my_table` WHERE `name` REGEXP 'l[éeè]on' 

此查詢不工作...我沒有錯誤,但沒有結果。你有什麼想法?

+2

它適用於我...也許是一個版本的東西?你在運行什麼MySQL版本? – LeonardChallis 2013-05-03 13:12:37

+0

如果我嘗試使用SELECT * FROM'my_table' WHERE'name' REGEXP'lé[o] n',沒關係。所以這不是我認爲的版本的問題。 – 2013-05-03 13:16:45

+0

似乎無法在小提琴中工作 - http://sqlfiddle.com/#!2/78eb95/3 – sgeddes 2013-05-03 13:16:58

回答

0

docs:

在逐個字節的方式正則表達式和RLIKE運營商合作,所以他們不 多字節安全並可能產生多字節 字符集意想不到的效果。此外,即使給定的歸類將它們視爲相等,這些運算符也會將它們的字節值和重音字符的字符進行比較,結果爲 。

你可以嘗試的是如何處理多字節字符,因此它處理的是1字節或2字節。它不會是完美的,因爲它會匹配「獅子」,但可能會讓你更接近。

REGEXP 'l.{1,2}on' 

可能影響你的的方式,REGEXP工作在MySQL的另一件事是,有上月底暗示的通配符,因爲你沒有指定的起點和終點所以

REGEXP 'l[éeè]on' 

是相當於

REGEXP '^.*l[éeè]on.*$' 

這意味着您可能會比您期望的更匹配。聽起來像你的問題是我提到的第一個場景