#mysql #database #mariadb #collation
#mysql #База данных #mariadb #сопоставление
Вопрос:
Я понимаю, что сопоставления представляют собой набор правил для сравнения по набору символов. MySQL / MariaDB имеет сопоставления таблиц и баз данных в дополнение к сопоставлению столбцов. Мне было интересно, в чем разница между сопоставлением этих трех (базы данных, таблицы и столбца).
Спасибо.
Комментарии:
1. Что должно
SELECT 'e' = 'é'
вернуться? Без таблицы для ссылки должна быть какая-то «более высокая» сортировка, верно?2. Не забывайте о сопоставлении сервера, которое устанавливается (или используется по умолчанию) во время установления соединения между сервером и клиентом.
Ответ №1:
Наборы символов и сопоставления MySQL можно интерпретировать как нисходящий список элементов с приоритетом. Самый верхний имеет наименьший приоритет, а самый нижний — самый приоритетный.
Порядок приоритета, при котором самый верхний имеет наименьший приоритет:
- Сопоставление сервера
- Сопоставление, зависящее от соединения
- Сопоставление базы данных
- Сопоставление таблиц
- Сопоставление столбцов
- Сопоставление запросов (с использованием
CAST
илиCONVERT
)
Сопоставление сервера устанавливается сервером, который устанавливается либо внутри my.cnf
, либо когда сервер был собран из исходного кода. По умолчанию это обычно будет latin1
или utf8
, в зависимости от вашей платформы.
Сопоставление, зависящее от соединения, устанавливается клиентом с помощью запроса like SET NAMES 'utf8' COLLATE 'utf8_unicode_ci';
. Большинство клиентов не устанавливают сопоставление для конкретного соединения, поэтому сервер будет использовать свое собственное значение по умолчанию, как описано выше.
Сопоставление базы данных устанавливается во время создания базы данных или вручную путем ее последующего обновления. Если вы не укажете его, он будет использовать сопоставление следующего более высокого уровня, которое будет либо зависящим от соединения, либо сопоставлением сервера.
Сопоставление таблицы такое же, как и сопоставление базы данных, за исключением того, что, если оставить поле пустым, по умолчанию будет использоваться база данных, затем зависящая от соединения, а затем, наконец, сопоставление сервера.
Сопоставление столбцов использует сопоставление таблицы по умолчанию, и если сопоставление не установлено, оно будет следовать по цепочке, чтобы найти сопоставление для использования, останавливаясь на сервере, если все остальные не были установлены.
Сопоставление запроса указывается в запросе с помощью CAST
или CONVERT
, но в противном случае будет использоваться следующее доступное сопоставление в цепочке. Это невозможно установить, если вы не используете функцию.
Пожалуйста, также обратитесь к поддержке набора символов страницы вручную.
Ответ №2:
Короче говоря. Когда вы устанавливаете сопоставление сервера. в UTF-8. Все базы данных, созданные без определения сопоставления, унаследуют его от сервера.
column iherits from table
table inherits from database
database inherits from server
Однако вы можете перезаписать сервер по умолчанию в одной из этих точек. Тогда все будет наследоваться от него.
Комментарии:
1. Ваш ответ тоже был хорош, спасибо, но я отметил другой, потому что он дал больше информации, которую я нашел полезной. Спасибо!
2. если я изменю сопоставление таблицы, обновит ли оно сопоставление всех столбцов (если не указано)?
3. Нет. Наследование применяется только при создании. Если вы измените таблицу, то новые столбцы получат новое сопоставление, но старые останутся такими, какими они были.