Соответствует порядку сортировки utf8_general_ci MySQL в JavaScript

0

Я хочу, чтобы убедиться, что порядок данных, отсортированных с JavaScript sort методом соответствует MySQL ORDER BY предложения. Я использую утилиту utf8_general_ci в MySQL.

Есть идеи?

Обновить:

Сравните разницу, когда я использую метод sort JavaScript без функции сравнения

MySQL:

Изображение 174551

JavaScript:

Изображение 174551

Чтобы перефразировать мой вопрос: мне нужна правильная функция сравнения, которую я могу предоставить методу sort поэтому она сортируется так же, как ORDER BY в таблице сопоставления utf8_general_ci.

  • 1
    Пожалуйста, предоставьте кусок кода, где вы столкнулись с вашей проблемой. Это может быть проблемой xy. Вы должны объяснить, почему вы не просто используете упорядоченные данные MySQL. Это может дать вам альтернативные подходы.
  • 1
    Вы уже прочитали документацию? developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… Объясните также, почему так важно иметь точно такой же порядок в JS.
Показать ещё 12 комментариев
Теги:
collation

1 ответ

1

В 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.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню