Что означает набор символов и сортировка?

Я могу прочитать документацию по MySQL, и это довольно ясно. Но как решить, какой набор символов использовать? На какие данные влияет сопоставление?

Я прошу объяснения двух и как их выбрать.

Ответ 1

Из MySQL docs:

A набор символов - это набор символов и кодировки. сортировка представляет собой набор правила для сравнения символов в набор символов. Пусть сделают ясно видно на примере мнимый набор символов.

Предположим, что мы имеем алфавит с четыре буквы: "A" , "B", "a", "b". Мы дайте каждой букве число: "A" = 0, 'B' = 1, 'a' = 2, 'b' = 3. Буква "A" - символ, число 0 - кодирование для "A" , а комбинация всех четырех букв и их encodings - это набор символов.

Теперь предположим, что мы хотим сравнить два строковых значения, "A" и "B". Самый простой способ сделать это - посмотреть на кодировки: 0 для "A" и 1 для 'B'. Поскольку 0 меньше 1, мы говорим "A" меньше "B". Теперь, что у нас есть только что сделано, примените сопоставление с нашими набор символов. Сортировка представляет собой набор правил (только одно правило): "сравнить кодировки". Мы называем это простейшее из всех возможных сопоставлений a двоичная сортировка.

Но что, если мы хотим сказать, что строчные и прописные буквы эквивалент? Тогда мы имели бы не менее двух правил: (1) строчные буквы 'a' и 'b' как эквивалентно "A" и "B"; (2), то сравните кодировки. Мы называем это без учета регистра. Это немного сложнее, чем двоичный сверка.

В реальной жизни большинство наборов символов имеют много символов: не только "А" и "В", но целые алфавиты, иногда несколько алфавитов или восточное письмо системы с тысячами символов, наряду со многими специальными символами и знаки препинания. Также в реальной жизни, у большинства коллайсов есть много правил: не просто нечувствительность к регистру, но также нечувствительность к акценту ( "акцент" - это знак, прикрепленный к персонажу, как в Немецкий 'ö') и многозначный (например, правило, что 'ö' = "OE" в одном из двух немецких Параметры сортировки).

Ответ 2

Кодировка символов - это способ кодирования символов так, чтобы они помещались в памяти. То есть, если кодировка соответствует ISO-8859-15, символ евро € будет закодирован как 0xa4, а в UTF-8 это будет 0xe282ac.

Сортировка - это как сравнивать символы, в латинском 9 есть буквы как e é è ê f, если они отсортированы по их двоичному представлению, они будут идти как ef é ê è но если для параметров сортировки установлено, например, французское, вы ' будет иметь их в порядке, вы думали, что они будут, что все e é è ê равны, а затем f.

Ответ 3

Набор символов - это подмножество всех написанных глифов. Кодировка символов определяет, как эти символы отображаются на числовые значения. Некоторые кодировки символов, такие как UTF-8 и UTF-16, могут кодировать любой символ в универсальном наборе символов. Другие, такие как US-ASCII или ISO-8859-1, могут кодировать только небольшое подмножество, так как они используют 7 и 8 бит на символ соответственно. Поскольку многие стандарты определяют как набор символов, так и кодировку символов, термин "набор символов" часто заменяется свободно для "кодировки символов".

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

Выбор набора символов и сортировки сводится к тому, является ли ваше приложение интернационализированным или нет. Если нет, то какой язык вы планируете?

Чтобы выбрать, какой набор символов вы хотите поддерживать, вы должны рассмотреть свое приложение. Если вы храните входные данные, вводимые пользователем, может быть трудно предвидеть все локали, в которых ваше программное обеспечение будет в конечном итоге использоваться. Чтобы поддержать их всех, лучше всего было бы поддерживать UCS (Unicode) с самого начала. Однако для этого есть затраты; многие западноевропейские персонажи теперь потребуют два байта хранения на символ вместо одного.

Выбор правильной сортировки может помочь производительности, если ваша база данных использует сортировку для создания индекса, а затем использует этот индекс для предоставления отсортированных результатов. Однако, поскольку правила сортировки часто зависят от локали, этот индекс будет бесполезен, если вам нужно сортировать результаты в соответствии с правилами другого языкового стандарта.

Ответ 4

Я предлагаю использовать utf8mb4_unicode_ci, который основан на стандарте Unicode для сортировки и сравнения, который точно сортируется в очень широком диапазоне языков.