2011-09-30 23 views

回答

2

似乎沒有一個因爲case sensitivity is tough to do in Unicode

有一個utf8_general_cs整理,但它似乎是實驗性的,並根據this bug report,不使用LIKE時所期望的。

如果您的數據僅包含西方元音變音(即包含在ISO-8859-1中的元音變音),您可能可以將搜索操作整理到latin1_german2_ci或創建一個單獨的搜索欄(具體排序規則根據this page重音敏感; latin1_general_ci可能也是如此,我不知道,現在不能測試)。

2

如果你想從不同的「咖啡」,「咖啡館」 您可以使用:

Select word from table_words WHERE Hex(word) LIKE Hex("café"); 

這樣,它會返回「咖啡廳」。

否則,如果你使用:

Select word from table_words WHERE Hex(word) LIKE Hex("cafe"); 

它將返回咖啡廳。 我正在使用latin1_german2_ci整理。

0

您可以使用「hex」使搜索區分變音。然後簡單地添加lcase以使其不再區分大小寫。所以這會給:

SELECT name FROM people WHERE HEX(LCASE(name)) = HEX(LCASE("René")) 

你確實把所有的索引都扔出了窗口。如果你想避免做一個全表掃描,你有「名」的索引,還搜索了同樣的事情,沒有十六進制和LCASE:

SELECT name FROM people WHERE name = "René" and HEX(LCASE(name)) = HEX(LCASE("René")) 

這樣,指數的「name」將僅用於查找例如「René」和「Rene」行,然後與「hex」的比較只需要在這兩行而不是整個表上進行。

+0

如果你想要案例摺疊,但重音敏感,請在http://bugs.mysql.com提出請求。 –

相關問題