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

4

4 回答 4

632

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

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

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

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

这似乎很重要,很高兴我阅读了评论并感谢@RichRemer。Nikki,我认为你应该在你的答案中编辑它,考虑到有多少浏览量。请参阅此处https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8.html和此处MySQL 中的 utf8mb4 和 utf8 字符集有什么区别?– Paulpro 3 月 12 日 17:46

于 2011-03-29T07:00:24.037 回答
36

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

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

于 2009-04-12T19:05:33.327 回答
9

它设置表的默认排序规则;如果您创建一个新列,则应与 latin_general_ci 进行整理——我认为。尝试为单个列指定排序规则,看看是否有效。MySQL 在处理这个问题方面有一些非常奇怪的行为。

于 2009-04-12T18:58:55.620 回答
3

可能不仅需要更改 SCHEMA 表

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

正如里奇所说 - utf8mb4

(玛丽亚数据库 10)

于 2017-09-20T21:28:02.270 回答