Django で外部キーを持つフィールドを追加しようとしたら、
以下のようなエラーが出た。
django.db.utils.OperationalError: (1005, 'Can\'t create table `<Database>`.`<Table>` (errno: 150 "Foreign key constraint is incorrectly formed")')
ENGINE が MyISAM だったことが原因。なぜ MyISAM で作られたかは不明。
mysql> SHOW CREATE TABLE <参照先のTable>;
+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
| <参照先のTable> | CREATE TABLE `<参照先のTable>` (
`name` varchar(50) NOT NULL,
PRIMARY KEY (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci |
+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
以下のように ENGINE を InnoDB に変更したことで解消。
ALTER TABLE <参照先のTable> ENGINE=InnoDB;