2012-07-03 72 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