2012-07-03 114 views
1

儘管有關於這個主題的所有討論,但我無法解決排序問題。混淆了mysql中的排序規則

  1. 創建一個數據庫有:

    CREATE DATABASE Desk_Database CHARACTER SET = utf8 COLLATE = utf8_unicode_ci; 
    
  2. 創建一個表叫用戶和插入以下數據:

    INSERT INTO Users 
        (KlantGroep, TypeUser, Naam, Password) 
    VALUES ("BNOF", "Manager", "André", "kkk"); 
    
    INSERT INTO Users 
        (KlantGroep, TypeUser, Naam, Password) 
    VALUES ("BNOF", "User", "Ingrid", "ppp"); 
    

現在使用下面的查詢它給出了一個時排回,但它不應該找到任何行,因爲André不同於Andre

SELECT klantgroep, typeuser FROM processors 
WHERE naam = 'Andre' AND password = 'kkk'; 

什麼是我不明白。我認爲utf8_unicode_ci不會丟掉e的重音,但它顯然是。

回答

1

請參閱this discussion here。根據這個討論,它可能有助於將排序規則設置爲utf8_bin,但也有可能與底層操作系統本身的設置發生衝突。

HTH

+0

我考慮過這個,但我不知道從哪裏開始在操作系統。 我使用Windows 7 Enterprise 32bit,荷蘭語。 – eengebruiker

+0

Windows 7不允許UTF8作爲默認的操作系統編碼,所以我不知道這是你的問題。如果您只是爲了測試而訪問Unix/Linux服務器,我會好奇的看看問題是否消失。看起來這可能是一個更適合ServerFault或SuperUser的討論。 – davidethell

+0

隨着表中填充了兩個給定的行,我不能再添加一行納姆'André'或'安德烈'了。它應該接受'安德烈',但它不會。 恐怕我並不聰明,從你指點的討論中找出正確的東西。切換到Unix服務器目前不適合我。 使用Windows 7時,是否有首選排序規則和字符集? – eengebruiker

1

這是預期的行爲:「安德烈」和「安德烈」是根據utf8_unicode_ci等同。重音不會丟失,只是比較兩個字符串的相等性時,e和é被認爲是相同的。

如果要考慮兩種不同,則必須使用其他排序規則,例如utf8_bin

+0

謝謝,我將不得不明天繼續。 – eengebruiker