Что означает набор символов и сопоставление? - PullRequest
290 голосов
/ 04 декабря 2008

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

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

Ответы [ 4 ]

480 голосов
/ 04 декабря 2008

Из MySQL Документы :

A набор символов представляет собой набор символов и кодировки. сопоставление представляет собой набор правила сравнения символов в набор символов. Давайте сделаем Различие ясно с примером набор воображаемых символов.

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

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

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

В реальной жизни большинство наборов символов имеют много символов: не только «A» и «B» но целые алфавиты, иногда множественные алфавиты или восточная письменность системы с тысячами символов, наряду со многими специальными символами и знаки препинания. Также в реальной жизни, большинство сопоставлений имеют много правил: не просто нечувствительность к регистру, но и нечувствительность к акценту («акцент» является пометьте прикрепленный к персонажу как в Немецкий 'ö') и многосимвольный отображения (такие как правило, что 'ö' = «О» в одном из двух немецких сортировки).

192 голосов
/ 04 декабря 2008

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

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

20 голосов
/ 04 декабря 2008

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

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

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

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

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

3 голосов
/ 06 марта 2017

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

...