2012-03-18 51 views
0

我有一個名爲provider的表。在provider表中,我有一個名爲provider的列。此列的字符編碼當前處理latin1:改變MySQL列編碼,級聯到FKs

`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也參考它的所有列。 (注意:根據自己的錯誤進行上述操作。)

回答

1

無法級聯ALTER TABLE更改。你需要分別做每個表。手冊指出外鍵引用的字符集和整理必須相同。因此,如果您只是在更改子表(或vice-vesa)之前嘗試更改父表的排序規則,MySQL將會抱怨一個可怕的模糊錯誤(errno 150)。因此,您必須在更改表之前禁用外鍵檢查:

SET foreign_key_checks = 0;
- DO ALTERS -
SET foreign_key_checks = 1;

應該工作。