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