MySQL中架构CHARSETVS表CHARSETVS列CHARSET有什么区别?
当我将表的字符集更改为utf8时,我可以在列中使用utf8mb4字符集吗?
谢谢。
在数据库级别指定字符集实际上就是为表定义默认字符集。
对表执行同样的操作将为列定义默认字符集。
由于您不能再往前走了,因此在列上指定一个字符集肯定会将该字符集用于存储在该列中的所有内容
如果未在列级别指定字符集,则使用表的字符集。如果未指定,则使用数据库的字符集。
创建表时,字符集和排序规则的备份是架构的设置。
一旦创建了表,它现在就有了默认的字符集和排序规则。(这与fancyPants所说的略有不同。(
类似地,在创建列(作为创建表的一部分,或使用ALTER .. ADD COLUMN
(时,可以显式地说明字符集和排序规则,也可以从表的默认值继承。同样,列的定义现在已冻结。
执行SHOW CREATE TABLE
将显示覆盖或继续保留隐式继承。SELECT .. FROM information_schema.columns ..
使每一列都有一个字符集和排序规则变得更加清晰。
也就是说,在"运行时"不存在"动态"继承。只有在创建了表或列时才进行继承。
请注意,每个字符集都有一个默认的排序规则。每个排序规则都属于一个特定的字符集(请参见排序规则名称的第一部分(。因此,指定字符集或排序规则隐含地指定另一个。