MySQLで外部キーを付ける時にエラー


symfonyでschema.ymlにごにょごにょ書いていざテーブル作成!と思ったら以下のエラー。

SQLSTATE[HY000]: General error: 1005 Can't create table 'dbname.#sql-192c_1a6' (errno: 150). Failing Query: "ALTER TABLE table1 ADD CONSTRAINT table1_user_id_sf_guard_user_id FOREIGN KEY (user_id) REFERENCES sf_guard_user(id)". Failing Query: ALTER TABLE table1 ADD CONSTRAINT domain_user_id_sf_guard_user_id FOREIGN KEY (user_id) REFERENCES sf_guard_user(id)

結論:原因は外部キーを付けるフィールドと参照先のフィールドの型があっていないこと。

これ、普通にDDLを書いていれば滅多に発生しないと思うけど、今回のようにORマッパー(ここではDoctrine)に作成させる場合、ORマッパーでの型名とDBMSでの型名の対応がちゃんとしてないと起こるかも。

具体的に言うと、schema.ymlでintegerと記載すると、MySQLのbigintでフィールドが作成される。integer(4)とすればMySQLでもintegerになる。分かりにくい・・・

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です