2012-05-06 59 views
3

我的數據庫中有特殊字符存在問題。他們現在顯示正確,但sql似乎在查詢中忽略它們。舉例來說,不幸的是我有這些項:
Morgait
Morgaít
Mórgait
查詢特殊字符敏感

現在這些名字有一個獨特的密鑰,而試圖添加第二和第三的第一個後,就已經打破說最後2個不能被添加,因爲這個名字不再是唯一的。總之,í被視爲一個正常的我,而ó是一個正常的o。

當我查詢: SELECT * FROM member WHERE charname = 'Morgait' 我得到所有3作爲結果。當我將我更改爲í,o至ó或同時更改兩者時也是如此。

我該如何讓數據庫看到這些差異?我有表設置爲ascii_general_ci(也嘗試過UTF 8 unicode ci)的排序規則。

回答

1

所有這些排序規則是accent insensitive。您可以嘗試utf8_bin這是accent sensitive,但它也case sensitive。 使用不區分變音的排序規則,例如é等於eë依此類推。

SELECT * FROM member WHERE charname = 'Morgait' COLLATE utf8_bin 

應該做的伎倆。如果你需要不區分大小寫,你可以試試

SELECT * FROM member WHERE LOWER(charname) = LOWER('Morgait') COLLATE utf8_bin 
+0

謝謝!是否真的沒有重音敏感和不區分大小寫的整理? –

+0

據我所知,沒有。請參閱http://bugs.mysql.com/bug.php?id=19567 – cypher

+0

嘖嘖,從2006年開始,仍然沒有修復..無論如何感謝您的答案! 至於區分大小寫,我將通過將其全部保存爲小寫字母並將表單輸入轉換爲小寫字母來解決該問題,然後在網站上以正確的方式顯示它。 –