问题排序瑞典字符ÅÄÖMySQL

时间:2011-04-03 10:26:22

标签: mysql sorting character

我正在尝试使用asc或desc对列表进行排序 - 具体取决于用户选择的内容。在列表中我有瑞典字符ÅÄÖ,它就在这里问题出现了。我有以下列表:

(First list)
Stängd
Stängd
Öppen
Krävs ej
Krävs ej

(代表;Stängd=已结束,Öppen=已开业,Krävssj=不需要)

列表应该排序 - 取决于用户选择的内容;

Öppen
Stängd
Stängd
Krävs ej
Krävs ej

Krävs ej 
Krävs ej
Stängd 
Stängd 
Öppen 

但现在是第一个列表出现了。所以问题是“Ö” - 字符。我的数据库和值所在的字段具有排序规则utf8_general_ci,因此这不是问题所在。字符“Ö”在两个数据库中都是正确的(通过PHPMyAdmin查找)并在打印出来时输出正确。

我的代码如下:

$querystr = "
    SELECT wposts.*
    FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta
    WHERE wposts.ID = wpostmeta.post_id
    AND wpostmeta.meta_key = '$sort_by'
    AND wposts.post_type = 'sida'
    AND wposts.post_status = 'publish'
    ORDER BY wpostmeta.meta_value $sort_order";

这怎么出现以及如何解决?

3 个答案:

答案 0 :(得分:25)

  

我的数据库和值所在的字段具有排序规则utf8_general_ci,因此这不是问题

但确实如此。 :)不同的排序规则有不同的排序顺序,以及它们如何解释变音符号的不同方式。

utf8_general_ciÖO进行排序。请尝试使用utf8_swedish_ci。这将具有正确的排序顺序,(IIRC)是ÄAÖ到字母表的末尾。

有关背景信息,请参阅9.1.7.8. Examples of the Effect of Collation

答案 1 :(得分:7)

general collation ÖO。如果您想在字母表末尾添加Ö,则需要使用utf8_swedish_ci

答案 2 :(得分:3)

如果要将现有表格转换为新的排序规则,只需使用以下内容:

alter table [tableName] convert to character set utf8 collate utf8_swedish_ci;