如何更改表的默认排序规则?

问题描述 投票:169回答:4
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命令的作用是什么?

mysql sql collation
4个回答
561
投票

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

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

编辑答案,感谢一些评论的提示:

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

这看起来非常重要,很高兴我阅读了评论并感谢@RichRemer。 Nikki,我认为你应该在你的答案中编辑它,考虑到这有多少观点。在这里看到https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8.html和这里What is the difference between utf8mb4 and utf8 charsets in MySQL? - Paulpro 3月12日17:46


32
投票

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

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


9
投票

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


2
投票

可能需要更改SCHEMA而不仅仅是表

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

(mariaDB 10)

© www.soinside.com 2019 - 2024. All rights reserved.