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;

Uncategorized

Posted by isurut