改变 MySQL 列编码,级联到 FK

Dav*_*542 0 mysql sql utf-8 character-encoding

我有一张名为provider. 在provider表中,我有一列名为provider. 该列的字符编码目前为latin1:

`provider` varchar(60) CHARACTER SET latin1 NOT NULL DEFAULT '',
Run Code Online (Sandbox Code Playgroud)

其他几个表FKprovider.provider也参考。我将如何更改编码utf8并将所有更改级联到外键引用?相当于:

ALTER TABLE provider MODIFY
    provider VARCHAR (60)
    CHARACTER SET utf8
    COLLATE utf8_unicode_ci;
Run Code Online (Sandbox Code Playgroud)

但是对于 FK 也引用它的所有列。(注意:根据自己的错误执行上述操作。)

Bri*_*nio 5

您不能级联 ALTER TABLE 更改。你需要分别做每张桌子。手册指出外键引用的字符集和排序规则必须相同。因此,如果您只是在更改子表(或副表)之前尝试更改父表的排序规则,MySQL 将抱怨一个可怕的模棱两可的错误(errno 150)。因此,您必须在更改表之前禁用外键检查:

SET foreign_key_checks = 0;
-- 做改变 --
SET foreign_key_checks = 1;

应该管用。