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

时间:2009-04-12 18:53:11

标签: mysql sql collation

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 个答案:

答案 0 :(得分:551)

更改表格的默认字符集和整理,包括现有列的(请注意转换为子句):

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

答案 1 :(得分:32)

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

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

答案 2 :(得分:9)

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

答案 3 :(得分:1)

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

ALTER SCHEMA <database name>默认字符集utf8mb4 DEFAULT COLLATE utf8mb4_unicode_ci(正如Rich所说 - utf8mb4);

(mariaDB 10)