2012-03-18 2 views
0

У меня есть таблица с именем provider. В таблице provider у меня есть столбец с именем provider. Кодировка символов этого столбца в настоящее время latin1:Alter 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. Вы должны делать каждую таблицу отдельно. В руководстве указано, что кодировка и сопоставление ссылок на внешние ключи должны быть одинаковыми. Таким образом, если вы просто попытаетесь изменить сортировку родительской таблицы перед изменением дочерней таблицы (или вице-vesa), MySQL будет жаловаться на ужасно неоднозначную ошибку (errno 150). Таким образом, перед изменением таблиц необходимо отключить проверку внешнего ключа:

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

Должно работать.

Смежные вопросы