Проблема сортировки шведских символов Å Ä Ö MySQL - PullRequest
10 голосов
/ 03 апреля 2011

Я пытаюсь отсортировать список с помощью asc или desc - в зависимости от того, что выберет пользователь.В списке у меня есть шведские символы Å Ä Ö, и именно здесь проблема обнаруживается.У меня есть следующий список:

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

(Постоянно; Stängd = Закрыто, Öppen = Открыто, Krävs ej = Не требуется)

Список должен быть отсортирован - в зависимости от того, что пользовательвыберите;

Ö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 ]

25 голосов
/ 03 апреля 2011

Моя база данных и поле, в котором находится значение, имеют параметры сортировки utf8_general_ci, так что это не проблема

Но это так.:) Разные параметры сортировки имеют разные порядки сортировки и разные способы интерпретации умлаутов.

utf8_general_ci будет сортировать Ö с O.Попробуйте вместо utf8_swedish_ci.Это будет иметь правильный порядок сортировки, который (IIRC) означает, что ÄAÖ идет до конца алфавита.

Для справочной информации см. 9.1.7.8.Примеры эффекта сопоставления

7 голосов
/ 03 апреля 2011

Общее сопоставление мест Ö с O. Если вы хотите Ö в конце алфавита, вам нужно использовать utf8_swedish_ci.

3 голосов
/ 15 января 2013

Если вы хотите преобразовать существующие таблицы в новое сопоставление, просто используйте следующее:

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