Я не понимаю Сопоставление? (Mysql, RDBMS, Наборы символов)

Я Понимаю Наборы символов, но я не понимаю Сопоставление. Я знаю, что Вы получаете сопоставление по умолчанию с каждым Набором символов в Mysql или любом RDBMS, но я все еще не получаю его! Кто-то может объяснить в терминах неспециалиста?

Заранее спасибо ;-)

13
задан Tom H 10 August 2010 в 19:20
поделиться

2 ответа

Основной смысл колляции базы данных заключается в определении того, как данные сортируются и сравниваются.

Чувствительность к регистру при сравнении строк

SELECT "New York" = "NEW YORK";` 

вернет true для нечувствительной к регистру коллизии; false - для чувствительной к регистру.

О том, какая именно коллизия что делает, можно узнать по суффиксам _ci и _cs в имени коллизии. Коллизии _bin выполняют бинарное сравнение (строки должны быть идентичны на 100%).

Сравнение умляутов/акцентированных символов

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

SELECT "Düsseldorf" =  "Dusseldorf";
SELECT "Èclair" =      "Eclair";

возвращает true в первом случае и false во втором. Чтобы узнать, что именно, необходимо прочитать описание каждой коллизии.

Сортировка строк

Колляция влияет на способ сортировки строк.

Например,

  • Умляуты Ä Ö Ü находятся в конце алфавита в финском/шведском алфавите latin1_swedish_ci

  • они рассматриваются как A O U в немецком DIN-. 1 сортировке (latin_german1_ci)

  • и как AE OE UE в немецкой сортировке DIN-2 (latin_german2_ci). ("телефонная книга")

  • В latin1_spanish_ci, "ñ" (n-tilde) является отдельной буквой между "n" и "o".

Эти правила приводят к различным порядкам сортировки при использовании нелатинских символов.

Использование коллизии во время выполнения

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

Это отсортирует таблицу по столбцу name, используя немецкие правила сортировки DIN-2:

SELECT name
FROM table
ORDER BY name COLLATE latin1_german2_ci;

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

MySQL Reference:

53
ответ дан 1 December 2019 в 17:25
поделиться

Сопоставление - это информация о том, как строки должны сортироваться и сравниваться.

Он содержит, например, чувствительность к регистру, например a = A , особенности специальных символов, например a = á , и порядок символов, например O < Ö .

4
ответ дан 1 December 2019 в 17:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: