MySQL中架构VS表VS列CHARSET有什么区别?

时间:2020-04-14 06:39:01

标签: mysql database utf8mb4

在MySQL中,模式CHARSET VS 表CHARSET VS 列在CHARSET中有什么区别?

当我将表的字符集更改为utf8时,可以在列中使用utf8mb4字符集吗?

谢谢。

2 个答案:

答案 0 :(得分:1)

在数据库级别指定字符集实际上是在定义表的默认字符集。

对表执行相同操作会为列定义默认字符集。

由于无法走得更远,因此在列上指定字符集肯定会使用该字符集存储在该列中的所有内容。
如果您未在列级别上指定字符集,则使用表的字符集。如果未指定,则使用数据库的字符集。

答案 1 :(得分:1)

创建表时,字符集和排序规则的备份是架构的设置。

创建表后,它现在具有默认字符集和排序规则。 (这与fancyPant所说的完全不同。)

类似地,在创建列时(作为创建表的一部分,或使用ALTER .. ADD COLUMN),您可以显式地了解字符集和排序规则,也可以继承表的默认值。再次,列的定义现在被冻结。

执行SHOW CREATE TABLE将显示覆盖或继续保留隐式继承。 SELECT .. FROM information_schema.columns ..使得每列都有一个字符集和排序规则更加清楚。

也就是说,在“运行时”没有“动态”继承。仅当创建表或列时才继承。

请注意,每个字符集都有一个默认排序规则。每个排序规则都属于一个特定的字符集(请参阅排序规则名称的第一部分)。因此,指定字符集或排序规则会隐式指定另一个。