我有一个名为provider
的表。在provider
表中,我有一列名为provider
。当前此列的字符编码为latin1:
`provider` varchar(60) CHARACTER SET latin1 NOT NULL DEFAULT '',
FK还参考了其他几张表
provider.provider
。如何将编码更改为utf8
并将所有更改层叠到外键引用?相当于:ALTER TABLE provider MODIFY
provider VARCHAR (60)
CHARACTER SET utf8
COLLATE utf8_unicode_ci;
但是对于FK引用的所有列也是如此。 (注意:自行执行上述操作会出错。)
最佳答案
您不能级联ALTER TABLE更改。您需要分别制作每个表。该手册指出,外键引用的字符集和排序规则必须相同。因此,如果您只是尝试在更改子表之前更改父表的排序规则(反之亦然),则MySQL会抱怨一个非常模棱两可的错误(错误号150)。因此,您必须在更改表之前禁用外键检查:
SET foreign_key_checks = 0;
-提醒-
SET foreign_key_checks = 1;
应该管用。
关于mysql - 更改MySQL列编码,级联为FK,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9762963/