Какая разница в схеме VS таблицы VS столбца CHARSET в MySQL?

Какая разница в схеме CHARSET VS таблицы CHARSET VS столбца CHARSET в MySQL?

Когда я изменяю кодировку своей таблицы на utf8, могу ли я использовать кодировку utf8mb4 в своем столбце?

Спасибо.


person Patrick Lim    schedule 14.04.2020    source источник


Ответы (2)


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

Выполнение того же для таблиц определяет набор символов по умолчанию для столбцов.

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

person fancyPants    schedule 14.04.2020

При создании таблицы резервной копией для кодировки и сортировки являются настройки схемы.

После того, как вы создали таблицу, она теперь имеет кодировку и параметры сортировки по умолчанию. (Это немного отличается от того, что сказал fancyPants.)

Точно так же при создании столбца (либо как часть создания таблицы, либо с помощью ALTER .. ADD COLUMN) вы можете явно указывать кодировку и сопоставление, или они могут наследовать значения по умолчанию, заданные для таблицы. Опять же, определение столбца теперь заморожено.

Выполнение SHOW CREATE TABLE покажет переопределение или оставит неявное наследование. SELECT .. FROM information_schema.columns .. проясняет, что у каждого столбца есть кодировка и параметры сортировки.

То есть нет «динамического» наследования во время выполнения. Наследование происходит только при создании таблицы или столбца.

Обратите внимание, что каждый набор символов имеет сопоставление по умолчанию. И каждая сортировка принадлежит определенному набору символов (см. первую часть имени сортировки). Таким образом, указание либо набора символов, либо сопоставления неявно указывает другое.

person Rick James    schedule 20.04.2020