Общие правила сортировки MySQL utf8mb4_general_ci, utf8mb4_unicode_ci, utf8mb4_bin, utf8mb4_0900_ai_ci и наборы символов хранения utf8 и utf8mb4

При создании базы данных нам часто нужно заполнить имя базы данных, набор символов и сопоставление;
и в этой статье в основном описаны часто используемые наборы символов хранения utf8 и utf8mb4; наборы символов сортировки utf8mb4_unicode_ci и utf8mb4_general_ci, utf8mb4_bin, utf8mb4_0900_ai_ci
вставьте сюда описание изображения

Как правило, я создаю базу данных и обычно использую utf8mb4_general_ci для сопоставления, потому что порядок специальных символов не должен быть таким точным.


1. Хранить наборы символов utf8 и utf8mb4

  • utf8 — это набор символов в Mysql, который поддерживает только символы UTF-8 размером до трех байтов, что является базовой многотекстовой плоскостью в Unicode.
  • Для сохранения символов UTF-8 длиной 4 байта в Mysql необходимо использовать набор символов utf8mb4, но поддерживаются только версии 5.5.3 и выше. Я думаю, чтобы получить лучшую совместимость, вы всегда должны использовать utf8mb4 вместо utf8.Для данных типа CHAR utf8mb4 будет занимать больше места.Согласно официальному предложению Mysql, используйте VARCHAR вместо CHAR.

Резюме :
UTF-8 использует от 1 до 4 байтов, формат кодирования переменной длины и кодировку символов. mb4 - это большинство байтов 4, используя 4 байта для представления полного UTF-8.

Максимальная длина символа в кодировке mysql utf8 составляет 3 байта.Если встречается символ шириной 4 байта, будет вставлено исключение. Самый большой символ Unicode, который может быть закодирован с помощью трехбайтовой кодировки UTF-8, — это 0xffff, который является базовой многоязычной плоскостью (BMP) в Unicode. Другими словами, любые символы Unicode, которые не находятся в базовой многотекстовой плоскости, не могут быть сохранены с использованием набора символов Mysql utf8. Включая выражения Emoji (Emoji — это специальная кодировка Unicode, обычно встречающаяся на мобильных телефонах iOS и Android), а также множество редко используемых китайских символов, а также любые новые символы Unicode и так далее.

utf8 в MySQL — это utfmb3, который имеет всего три байта, что экономит место, но не может выражать все UTF-8. Поэтому рекомендуется использовать utf8mb4 (Он является надмножеством utf8 и полностью с ним совместим, он может хранить больше символов с четырьмя байтами, что включает в себя почти все языки, которые можно увидеть в мире.)。


2. Сортировка наборов символов utf8mb4_unicode_ci и utf8mb4_general_ci, utf8mb4_bin, utf8mb4_0900_ai_ci

Обычно используемые правила сопоставления MySQL utf8mb4_general_ci, utf8mb4_unicode_ci и utf8mb4_bin
ci нечувствительны к регистру, которые не чувствительны к регистру.
utf8mb4_unicode_ci :
он основан на стандартном Unicode для сортировки и сравнения и может точно сортировать между различными языками.Правила сортировки Unicode реализуют немного сложный алгоритм сортировки, чтобы иметь возможность обрабатывать специальные символы.
utf8mb4_general_ci :
это устаревшее сопоставление, которое не поддерживает расширения, оно может выполнять только посимвольное сравнение. Сравнения, сделанные с помощью сортировки utf8_general_ci, выполняются быстро, но сравнения менее корректны, чем сравнения с использованием сортировки utf8mb4_unicode_ci.
utf8mb4_bin :
компилирует и сохраняет каждый символ строки как двоичные данные с учетом регистра и может хранить двоичное содержимое.
utf8mb4_0900_ai_ci :
MySQL 8.0 по умолчанию использует utf8mb4_0900_ai_ci, который является одним из utf8mb4_unicode_ci.Конкретные значения следующие:
uft8mb4 означает схему кодирования UTF-8, и каждый символ занимает до 4 байтов.
0900 относится к версии алгоритма сопоставления Unicode. (Алгоритм сопоставления Unicode — это метод, используемый для сравнения двух строк Unicode, которые соответствуют требованиям стандарта Unicode).
ai относится к нечувствительности к акценту. То есть нет никакой разницы между e, è, é, ê и ë при сортировке.
ci означает нечувствительность к регистру. То есть разницы между p и P при сортировке нет.
utf8mb4 стал набором символов по умолчанию, с utf8mb4_0900_ai_ci в качестве сопоставления по умолчанию в MySQL 8.0.1 и более поздних версиях. Ранее параметром сортировки по умолчанию было utf8mb4_general_ci. Поскольку сопоставление utf8mb4_0900_ai_ci теперь используется по умолчанию, новые таблицы могут по умолчанию хранить символы вне базовой многоязычной плоскости. Теперь эмодзи можно сохранять по умолчанию. Если требуется чувствительность к акценту и регистру, вместо этого можно использовать utf8mb4_0900_as_cs.

2.1 Разница между часто используемым utf8mb4_unicode_ci и utf8mb4_general_ci

1. Точность

utf8mb4_unicode_ci основан на стандартном Unicode для сортировки и сравнения и может точно сортировать между различными языками.

utf8mb4_general_ci не реализует сопоставление Unicode, и результаты сортировки могут быть противоречивыми при встрече с некоторыми специальными языками или наборами символов.

Но в большинстве случаев порядок этих специальных символов не обязательно должен быть таким точным .

2. Производительность

utf8mb4_general_ci работает быстрее при сравнении и сортировке

utf8mb4_unicode_ci В особых случаях сопоставление Unicode реализует несколько сложный алгоритм сортировки , чтобы иметь возможность обрабатывать специальные символы .

Но в подавляющем большинстве случаев таких сложных сопоставлений не происходит. По сравнению с тем, какую сортировку выбрать, пользователи должны больше беспокоиться о необходимости унификации набора символов и сортировки в базе данных.

Рекомендуется использовать utf8mb4_unicode_ci, но с utf8mb4_general_ci проблем не возникает.

рекомендация

отblog.csdn.net/munangs/article/details/126617226