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

284

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

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

Теги:
database
database-design
character-set

4 ответа

454
Лучший ответ

Из 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" в одном из двух немецких Параметры сортировки).

171

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

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

  • 4
    Важно отметить, что для одной кодировки может быть много разных сопоставлений. Тот, который является «правильным», зависит от семантики текста, которая обычно определяется языком, на котором он написан.
19

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

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

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

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

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

  • 0
    извини, чувак, я только начинающий, и мне просто нужны твои разъяснения. Итак, могу ли я понять сопоставление таким образом, это то, что гарантирует, что каждый символ (будь то латинский или китайский) будет правильно распознан и задан соответствующими кодировками. Это верно? Надеюсь на ваш ответ
  • 1
    @Mirich Нет, сортировка - это информация о том, как сортировать символы. Разные регионы мира предпочитают сортировать персонажей по-разному.
3

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

  • 3
    из ОП: «Я прошу объяснения двух и как их выбрать»
  • 1
    @simhumileco, извини, чувак. Я только начинающий, и мне просто нужно твое разъяснение. Итак, могу ли я понять сопоставление таким образом, это то, что гарантирует, что каждый символ (будь то латинский или китайский) будет правильно распознан и задан соответствующими кодировками. Это верно? Надеюсь на ваш ответ
Показать ещё 1 комментарий

Ещё вопросы

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