Как изменить настройку таблицы по умолчанию?

create table check2(f1 varchar(20),f2 varchar(20));

создает таблицу со значением по умолчанию latin1_general_ci;

alter table check2 collate latin1_general_cs;
show full columns from check2;

показывает индивидуальную сортировку столбцов как "latin1_general_ci".

Тогда каков эффект команды alter table?

Ответ 1

Чтобы изменить набор символов по умолчанию и параметры сортировки таблицы, в том числе существующих столбцов (обратите внимание на условие преобразования в):

alter table <some_table> convert to character set utf8mb4 collate utf8mb4_unicode_ci;

Отредактировал ответ, благодаря подсказке некоторых комментариев:

Следует избегать рекомендации utf8. Это почти никогда не то, что вы хотите, и часто приводит к неожиданным беспорядкам. Набор символов utf8 не полностью совместим с UTF-8. Набор символов utf8mb4 - это то, что вы хотите, если вы хотите UTF-8. - Рич Ремер 28 марта '18 в 23:41

а также

Это кажется очень важным, рад, что я прочитал комментарии и спасибо @RichRemer. Никки, я думаю, тебе следует отредактировать это в своем ответе, учитывая количество просмотров. Смотрите здесь https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8.html и здесь. В чем разница между наборами utf8mb4 и utf8 в MySQL? - Paulpro 12 марта в 17:46

Ответ 2

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

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

Ответ 3

Он устанавливает сопоставление по умолчанию для таблицы; если вы создадите новый столбец, который должен быть сопоставлен с latin_general_ci - я думаю. Попробуйте указать сортировку для отдельного столбца и посмотреть, работает ли это. У MySQL есть действительно странное поведение в отношении того, как он справляется с этим.

Ответ 4

возможно, потребуется изменить SCHEMA не только таблицу

ALTER SCHEMA '<database name>'  DEFAULT CHARACTER SET utf8mb4  DEFAULT COLLATE utf8mb4_unicode_ci (as Rich said - utf8mb4);

(mariaDB 10)