Изменение кодировки столбцов MySQL, каскадное преобразование в FK - PullRequest
0 голосов
/ 19 марта 2012

У меня есть таблица с именем provider. В таблице provider у меня есть столбец с именем provider. Кодировка символов этого столбца в настоящее время латинская1:

`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 Ответ

2 голосов
/ 19 марта 2012

Вы не можете каскадно вносить изменения ALTER TABLE.Вам нужно сделать каждую таблицу отдельно.В руководстве говорится, что кодировка и сопоставление ссылок на внешние ключи должны быть одинаковыми.Таким образом, если вы просто попытаетесь изменить параметры сортировки родительской таблицы перед изменением дочерней таблицы (или наоборот), MySQL будет жаловаться на чудовищно неоднозначную ошибку (ошибка 150).Таким образом, вы должны отключить проверку внешнего ключа перед изменением таблиц:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...