Разница между базой данных, таблицей, сопоставлением столбцов

Я понимаю, что сопоставления — это набор правил для сравнения набора символов. В MySQL/MariaDB есть параметры сортировки таблиц и баз данных в дополнение к параметрам сортировки столбцов. Мне было интересно, в чем разница между сопоставлением этих трех (база данных, таблица и столбец).

Спасибо.


person Omar Abdel Bari    schedule 22.06.2014    source источник
comment
Что должен вернуть SELECT 'e' = 'é'? Без таблицы для ссылки должна быть какая-то более высокая сортировка, верно?   -  person Niet the Dark Absol    schedule 23.06.2014
comment
Не забывайте о сортировке сервера, которая устанавливается (или используется по умолчанию) во время рукопожатия соединения между сервером и клиентом.   -  person Carl Bennett    schedule 23.06.2014


Ответы (2)


Наборы символов и сопоставления MySQL можно интерпретировать как нисходящий список приоритетных элементов. Самое верхнее имеет наименьший приоритет, а самое нижнее — наиболее приоритетное.

Порядок старшинства, где наивысший является наименьшим приоритетом:

  • Сопоставление серверов
  • Сопоставление для конкретного соединения
  • Сопоставление базы данных
  • Сортировка таблиц
  • Сопоставление столбцов
  • Сопоставление запросов (с использованием CAST или CONVERT)

Сопоставление сервера задается сервером, который устанавливается либо внутри my.cnf, либо при сборке сервера из исходного кода. По умолчанию это обычно будет latin1 или utf8, в зависимости от вашей платформы.

Сопоставление для конкретного соединения задается клиентом с помощью запроса типа SET NAMES 'utf8' COLLATE 'utf8_unicode_ci';. Большинство клиентов не устанавливают сопоставление для конкретного соединения, поэтому сервер будет использовать собственное значение по умолчанию, как описано выше.

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

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

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

Сопоставление запроса указывается в запросе с помощью CAST или CONVERT, но в противном случае будет использоваться следующее доступное сопоставление в цепочке. Невозможно установить это, если вы не используете функцию.

Также см. страницу руководства Поддержка набора символов.

person Carl Bennett    schedule 22.06.2014

Короче. Когда вы устанавливаете сопоставление сервера. в UTF-8. Все базы данных, созданные без определения сортировки, наследуют ее от сервера.

column iherits from table
table inherits from database
database inherits from server

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

person Grzegorz    schedule 22.06.2014
comment
Ваш ответ тоже был хорош, спасибо, но я отметил другой, потому что он дал больше информации, которую я нашел полезной. Спасибо! - person Omar Abdel Bari; 23.06.2014
comment
если я изменю сортировку таблицы, обновит ли она все сортировку столбцов (если не указано)? - person maestro; 21.05.2020
comment
Неа. Наследование применяется только при создании. Если вы измените таблицу, то новые столбцы получат новую сортировку, а старые останутся прежними. - person Grzegorz; 08.10.2020