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

187
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?

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

Ответы:

597

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

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

Никки Эрвин Рамирес
источник
4
Каковы последствия изменения набора символов по умолчанию? Обновляет ли он существующие данные и поэтому должен проходить через таблицу и делать обновления, блокируя их и т. Д.?
грант
utf8_binлучше не так ли? Какая разница между utf8_binа utf8_unicode_ci?
Джасом Дотнет
1
Это просто пример, который я использовал. Разница в том, что utf8_binс учетом регистра и utf8_unicode_ciбез учета регистра. Одно не обязательно лучше другого - используйте то, что соответствует вашим потребностям.
Никки Эрвин Рамирес
12
@JasomDotnet теперь вы должны использовать utf8mb4_unicode_ci stackoverflow.com/questions/766809/…
baptx
2
Следует избегать рекомендаций utf8. Это почти никогда не то, что вы хотите, и часто приводит к неожиданным беспорядкам. Набор utf8символов не полностью совместим с UTF-8. Набор utf8mb4символов - это то, что вы хотите, если вы хотите UTF-8.
Рич Ремер
34

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

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

Фредрик
источник
8
На самом деле, MySQL имеет ПЯТЬ уровней сопоставления, есть настройка сопоставления по умолчанию для набора символов, о которой многие забывают.
Деви
6
Также есть сопоставление соединений show variables like "collation%";, так что всего SIX .
Дмитрий Лазерка
9

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

Дон верве
источник
3

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

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

(mariaDB 10)

AssyK
источник
<database name>вместо<table name>
дневог
1
Смотрите мой комментарий к принятому ответу, почему вы не должны рекомендовать utf8, но utf8mb4.
Рич Ремер