Сортировка неанглийских имен с помощью MySQL

Я пытаюсь отсортировать таблицу, содержащую греческие символы. Соответствующая английская версия таблицы сортируется (и ASC, и DESC) просто отлично, каждый раз, когда вы нажимаете на заголовок таблицы.

Я искал на греческих форумах, и единственное предложенное решение - использовать ORDER BY BINARY. Фактически, многие люди говорили, что использование двоичного порядка решило их проблему. К сожалению, в моем случае это не так. Я знаю, что та же проблема существует с такими языками, как немецкий, где использование умлаутов нарушает порядок, и вообще с языками со специальными символами. Если у кого-то есть идеи, как победить эту проблему, я был бы признателен.


person user926652    schedule 03.01.2012    source источник
comment
Из того, что я знаю из иврита, нелатинские языки сортируются по их индексу ASCII (или Unicode), который обычно должен работать с такими языками, как греческий. Так что не вижу в чем проблема. Не могли бы вы сфокусировать свой вопрос?   -  person Madara's Ghost    schedule 04.01.2012
comment
Я изменил ваш тег php на mysql, так как это не имеет ничего общего с PHP. Кроме того, не могли бы вы привести пример чего-то, что плохо сортируется? Всего несколько имен. Какая кодировка у вашей таблицы?   -  person kba    schedule 04.01.2012
comment
Проблема в том, что я не получаю правильный заказ. Например, слова, начинающиеся с «А», что даже в греческом языке является первой буквой алфавита, появляются почти в конце моей таблицы. Я не очень разбираюсь в PHP, и теперь я думаю, является ли проблема сопоставлением таблицы?   -  person user926652    schedule 04.01.2012
comment
Какой набор символов и сопоставление имеют эти поля?   -  person cmbuckley    schedule 04.01.2012
comment
UTF-8 - это набор символов. utf8_general_ci — это сопоставление. Когда для сортировки установлено греческое, я вижу вопросительные знаки вместо букв.   -  person user926652    schedule 04.01.2012
comment
Вы ожидаете, что греческая Α (заглавная альфа) появится с латинской А (заглавная а)? Потому что не будет — оно появится где-то после латинского Z (заглавная z).   -  person cmbuckley    schedule 04.01.2012
comment
Греческие имена и английские имена сортируются отдельно в соответствии с выбранным языком. Так что я не ожидаю, что греческая А будет с латинской А, я ожидаю, что она будет перед греческой гаммой Γ (третья буква алфавита). На самом деле имена, начинающиеся с греческой гаммы, стоят перед всем остальным в моем списке.   -  person user926652    schedule 04.01.2012
comment
Прежде всего, спасибо всем вам за то, что потрудились ответить мне и помочь мне думать в правильном направлении. Так что первоначальный комментарий пользователя Truth был правильным. Я изменил сопоставление таблицы на utf8_unicode_ci, и все в правильном порядке даже на греческом языке. Спасибо вам всем!!   -  person user926652    schedule 04.01.2012


Ответы (1)


Согласно потоку на forums.mysql.com, в MySQL 6.0, вы можете сортировать греческие имена, если кодировка вашей таблицы установлена ​​​​на utf8_general_ci.

create table t (s1 char(1) character set utf8 collate utf8_general_ci); 
insert into t values ('Α'),('Β'),('Γ'),('Δ'),('Ε'),('Ζ');
select * from t order by s1;

The above should return

+----+ 
| s1 | 
+----+ 
| Α  | 
| Β  | 
| Γ  | 
| Δ  | 
| Ε  | 
| Ζ  |
+----+ 
person kba    schedule 03.01.2012
comment
Я использую MySQL 5.1.53. Вы предлагаете мне обновиться до последней версии? - person user926652; 04.01.2012
comment
@ user926652, это не работает в MySQL 5.1.x, но работает в MySQL 6 - это все, что я могу сказать. Стоит ли обновляться, я не могу сказать. Похоже, он находится на ранней стадии разработки, так что это может быть плохой идеей, но он решит эту проблему. - person kba; 04.01.2012