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命令的作用是什么呢?


它为表设置默认的排序规则;如果你创建了一个新列,那应该与latin_general_ci -我认为。尝试为每个列指定排序规则,看看是否有效。MySQL在处理这个问题的方式上有一些非常奇怪的行为。


MySQL有4个级别的排序:服务器,数据库,表,列。 如果更改服务器、数据库或表的排序规则,则不会更改每个列的设置,而是更改默认排序规则。

例如,如果你改变了一个数据库的默认排序规则,你在该数据库中创建的每个新表都将使用该排序规则,如果你改变了一个表的默认排序规则,你在该表中创建的每一列都将使用该排序规则。


更改包含现有列的表的默认字符集和排序规则(注意convert To子句):

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

由于一些评论的提示,编辑了答案:

应避免推荐utf8。这几乎从来都不是你想要的,而且经常会导致意想不到的混乱。utf8字符集与UTF-8不完全兼容。如果你想要UTF-8, utf8mb4字符集就是你想要的。- Rich Remer 18年3月28日23:41

and

这似乎很重要,很高兴我读了评论,谢谢@RichRemer。尼基,考虑到这段视频的浏览量,我觉得你应该把这句话写进你的回答里。在MySQL中utf8mb4和utf8字符集有什么区别?——保罗3月12日17:46


可能需要改变SCHEMA不只是表

ALTER SCHEMA `<database name>`  DEFAULT CHARACTER SET utf8mb4  DEFAULT COLLATE utf8mb4_unicode_ci ;

正如Rich所说- utf8mb4

mariaDB (10)