我有一个名为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/

10-12 17:16