Разница между командами utf8mb4_unicode_ci и utf8mb4_unicode_520_ci в MariaDB/MySQL?

Я вошел в MariaDB/MySQL и ввел:

SHOW COLLATION;

Я вижу utf8mb4_unicode_ci и utf8mb4_unicode_520_ci среди доступных параметров сортировки. В чем разница между этими двумя сопоставлениями и что мы должны использовать?

Ответы

Ответ 1

Ну, вы должны прочитать в документации. Я не могу сказать вам, что вы должны использовать, потому что каждый проект индивидуален.

10.1.3 Соглашения об именовании сопоставлений

Названия параметров сортировки MySQL соответствуют следующим соглашениям:

Имя параметров сортировки начинается с имени набора символов, с которым оно связано, за которым следует один или несколько суффиксов, указывающих другие характеристики параметров сортировки. Например, utf8_general_ci и latin_swedish_ci - это сопоставления для наборов символов utf8 и latin1 соответственно.

Специфичная для языка сортировка включает в себя название языка. Например, utf8_turkish_ci и utf8_hungarian_ci сортируют символы для набора символов utf8, используя правила турецкого и венгерского соответственно.

Чувствительность к регистру для сортировки указывается с помощью _ci (без учета регистра), _cs (с учетом регистра) или _bin (двоичное; сравнение символов основано на значениях двоичного кода символа). Например, latin1_general_ci нечувствителен к регистру, latin1_general_cs чувствителен к регистру, а latin1_bin использует значения двоичного кода.

Для Unicode имена параметров сортировки могут включать в себя номер версии, чтобы указать версию алгоритма сортировки Unicode (UCA), на которой основан алгоритм. Для сопоставлений на основе UCA без номера версии в имени используются весовые клавиши UCA версии-4.0.0. Например:

utf8_unicode_ci (без названной версии) основан на весовых клавишах UCA 4.0.0> (http://www.unicode.org/Public/UCA/4.0.0/allkeys-4.0.0.txt).

utf8_unicode_520_ci основан на весовых клавишах UCA 5.2.0 (http://www.unicode.org/Public/UCA/5.2.0/allkeys.txt).

Для Unicode параметры сортировки xxx_general_mysql500_ci сохраняют порядок исходных параметров сортировки xxx_general_ci до 5.1.24 и позволяют обновлять таблицы, созданные до MySQL 5.1.24. Для получения дополнительной информации см. раздел 2.11.3, "Проверка того, должны ли таблицы или индексы быть перестроены", и Раздел 2.11.4, "Восстановление или восстановление таблиц или индексов".

Источник: https://dev.mysql.com/doc/refman/5.6/en/charset-collation-names.html

Ответ 2

Чтобы узнать немного больше о фактических различиях, вы можете перейти в https://dev.mysql.com/worklog/task/?id=2673 и нажать "Архитектура высокого уровня".

Ответ 3

Я разработаю ответ @StuiterSlurf и сосредоточусь на деталях utf8mb4_unicode_ci/utf8mb4_unicode_520_ci:

Как вы можете прочитать здесь (Питер Гулутзан), существует проблема с сортировкой/сравнением польской буквы "Ł" (L с ударением) (нижний регистр: "ł"; html esc: ł и Ł) - у нас есть следующее допущение в кодировании (то же самое с mb4):

utf8_polish_ci      Ł greater than L and less than M
utf8_unicode_ci     Ł greater than L and less than M
utf8_unicode_520_ci Ł equal to L
utf8_general_ci     Ł greater than Z

На польском языке буква Ł идет после буквы L и до M. И для другой системы кодирования вы получите разные результаты сортировки. Ни одна из этих кодировок не является лучше или хуже - это зависит от ваших потребностей.