我正在尝试使用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";
这怎么出现以及如何解决?
答案 0 :(得分:25)
我的数据库和值所在的字段具有排序规则utf8_general_ci,因此这不是问题
但确实如此。 :)不同的排序规则有不同的排序顺序,以及它们如何解释变音符号的不同方式。
utf8_general_ci
会Ö
与O
进行排序。请尝试使用utf8_swedish_ci
。这将具有正确的排序顺序,(IIRC)是ÄAÖ
到字母表的末尾。
答案 1 :(得分:7)
general collation Ö
位O
。如果您想在字母表末尾添加Ö
,则需要使用utf8_swedish_ci
。
答案 2 :(得分:3)
如果要将现有表格转换为新的排序规则,只需使用以下内容:
alter table [tableName] convert to character set utf8 collate utf8_swedish_ci;