我在Django模型中添加了一个表'GameRatings',并使用South进行迁移。该表与一个名为“Game”的表有一对一的关系。
迁移失败,并显示以下错误消息:
2014-01-07 10:51:15,026](0.505)创建表
app_gameratingsmodel
(game_id
varchar(32)NOT NULL PRIMARY KEY,averageRating
双精度NOT NULL,numRatings
整数NOT NULL); ARGS = [][2014-01-07 10:51:15,650](0.294)改变 表
app_gameratingsmodel
添加约束game_id_refs_gameID_fe5d3728
FOREIGN KEY(game_id
)参考app_gamemodel
(gameID
);; ARGS = []致命错误 - 以下SQL查询失败:ALTER TABLE
app_gameratingsmodel
添加约束game_id_refs_gameID_fe5d3728
FOREIGN KEY(game_id
)参考文献app_gamemodel
(gameID
);错误是:(1822年,“未能成功 添加外键constaint。缺少约束索引 引用表中的'game_id_refs_gameID_fe5d3728' 'app_gamemodel'“)
我不明白MySQL在谈论什么索引。有人可以帮忙吗?
感谢。
答案 0 :(得分:2)
当您尝试引用具有不同数据类型的两列时(例如,VARCHAR为INT或甚至INT为UINT!),通常会发生这种情况。我总是忘记检查Workbench中的无符号标记:)
答案 1 :(得分:1)
您可能对app_gamemodel.gameID没有UNIQUE约束。为了能够建立外键约束,数据库需要一个UNIQUE(或PRIMARY KEY,几乎相同)。
答案 2 :(得分:1)
好的,我想。事实证明,两个表的列之间存在字符集不匹配。
对于GameTable来说,charset是utf8,因为新版本是用charset latin创建的,因为那是DB的默认字符集。 :)