Я хочу, чтобы убедиться, что порядок данных, отсортированных с JavaScript sort
методом соответствует MySQL ORDER BY
предложения. Я использую утилиту utf8_general_ci в MySQL.
Есть идеи?
Обновить:
Сравните разницу, когда я использую метод sort
JavaScript без функции сравнения
MySQL:
JavaScript:
Чтобы перефразировать мой вопрос: мне нужна правильная функция сравнения, которую я могу предоставить методу sort
поэтому она сортируется так же, как ORDER BY
в таблице сопоставления utf8_general_ci.
В MySQL нет сопоставления, которое ставит acute-o
перед A
, поэтому я не думаю, что это возможно. И я бы предположил, что Javascript является "неправильным".
Для дальнейшего обсуждения, пожалуйста, укажите текст, вставленный, а не изображения. Кроме того, постарайтесь предоставить шестнадцатеричный символ соответствующих символов - как из Javascript, так и из MySQL.
SELECT col, HEX(col), LENGTH(col), CHAR_LENGTH(col) FROM ...
и предоставить SHOW CREATE TABLE
для рассматриваемой таблицы. Возможно, что-то не так с настройкой, а не с сортировкой.
Может быть
Возможно, Javascript слепо сравнивает "байты", а не "символы". Именно так может возникнуть острый (западноевропейский характер) перед польскими персонажами. Еще один тест - добавьте в ваш тестовый пример пару неактивных символов. Вы можете обнаружить, что впереди даже острое о.
Добавление lz
в тестовый пример определит, будет ли lz < ł
, правильным для польского, но не так, как работает utf8_general_ci. Вы должны рассмотреть utf8_polish_ci
. Чтобы продемонстрировать slash-l:
console.log(letterSort('de', ['a','z','ä', 'ł', 'lz', 'l', 'z', 'ó']));
console.log(letterSort('pl', ['a','z','ä', 'ł', 'lz', 'l', 'z', 'ó']));
console.log(['a','z','ä', 'ł', 'lz', 'l', 'z', 'ó'].sort());
> Array ["a", "ä", "l", "ł", "lz", "ó", "z", "z"]
> Array ["a", "ä", "l", "lz", "ł", "ó", "z", "z"]
> Array ["a", "l", "lz", "z", "z", "ä", "ó", "ł"]
В последнем случае обратите внимание, что все символы с акцентом появляются после "z". Вероятно, это эквивалентно MySQL COLLATION utf8_bin
.