2013-08-13 5 views
3

Я запускаю запрос select в таблице mysql и пытается заказать его по столбцу «name» в таблице.
Столбец имен содержит имена и имена английских символов с латинским символом, таким как â.
Я столкнулся с проблемой ниже.
Запроса бегает возвращают результаты заказанных в приведенной ниже форме т.е.
Например: если имя содержит «лучник», «aaakash», «â Hayden», «Борн», «JASON»
Результатов возвращаемого запроса упорядочен ниже
«aaakash», «лучник», «â Hayden», «Борна», «JASON»Mysql упорядочивается по столбцу с символами Unicode

Однако я хочу заказать его на основе точек юникода кода (как показано ниже)
«aaakash» , "лучник", "bourne", "jason", "hayden"

(См. разницу в позиции à hayden в заказах)
Что я могу сделать, чтобы заказать результаты на основе положения символа в наборе символов в Юникоде?

+0

http://stackoverflow.com/questions/12988249/mysql-5-1-61-sorting-for-central-european-languages-in-utf8 –

ответ

5

Однако я хочу заказать его на основе точек Юникода кода (как показано ниже)

Для сортировки с использованием точки Юникода кода, вам, вероятно, нужно использовать utf8_bin сверку.

Точно, суффикс _bin указывает сортировку по двоичное представление каждого символа.


Для переопределение сортировки по умолчанию при заказе, вы будете использовать ORDER BY ... COLLATE:

Перефразируя документации:

SELECT k 
FROM t1 
ORDER BY k COLLATE utf8_bin; 

Если текст колонки делает не использовать utf8 кодирования, вам необходимо будет CONVERT:

SELECT k 
FROM t1 
ORDER BY CONVERT(k USING utf8) COLLATE utf8_bin; 

Пожалуйста, обратите внимание, я использовал utf8 здесь в качестве примера, как это наиболее распространенная кодировка Unicode. Но ваш сервер MySQL, вероятно, поддерживает другую кодировку Unicode, например ucs2 («UTF-16»).

+0

Вы можете прочитать об этом здесь http: // dev .mysql.com/DOC/RefMan/5.7/ен/кодировка-двоично-collations.html. если вы имеете в виду на уровне байта с «кодами Unicode», вы должны использовать utf8_bin. –

+0

Спасибо Сильвен. Это помогло. – Bourne

+0

@RaymondN, учитывая подразумеваемый диапазон символов, 'ucs2' (16-разрядная, фиксированная длина), по-видимому, является допустимой кодировкой Unicode для этой цели. Или я что-то пропустил? –