Я использую тип данных Enum в качестве первичного ключа, на который ссылается внешний ключ в другой таблице. Если мне нужно добавить дополнительный элемент к этому значению перечисления, я использую
ALTER TABLE <table> MODIFY <colName> ENUM(<OLD VALUES>, NEW VAL);
на обеих таблицах. Работает нормально.
У меня был один неясный пример, в котором я перешел от <255 значений к большему. В этом случае ENUM потребуется переключиться с 1-байтового хранилища на два байта. Вот когда это не удается. Дает мне </p>
ОШИБКА 1025 (HY000): Ошибка при переименовании './TXCAD/#sql-5912_86' в './TXCAD/EN_TABLE' (номер ошибки: 150)
Я провел небольшое исследование и обнаружил, что это преобразование из 1 байта в два байта в основной таблице приводит к несоответствию типа данных внешнего ключа. (Если я начну с 256+ значений, это вообще не произойдет. Я это проверил)
Есть ли способ заставить MySql использовать 2 байта с самого начала, даже если ENUM () имеет менее 255 значений при создании таблицы?
Использование
MySql - 5.1
InnoDB таблицы