2014-01-07 145 views
1

我在Django模型中添加了一個表'GameRatings',並使用South進行遷移。該表與一個名爲「遊戲」的表具有一對一的關係。MySQL無法添加外鍵約束

遷移失敗,出現以下錯誤消息:

2014年1月7日10:51:15026](0.505)CREATE TABLE app_gameratingsmodelgame_id VARCHAR(32)NOT NULL PRIMARY KEY,averageRating雙精度NOT NULL,numRatings integer NOT NULL); ARGS = []

[2014年1月7日10:51:15650](0.294)ALTER TABLE ADD app_gameratingsmodel約束 game_id_refs_gameID_fe5d3728外鍵(game_id)參考文獻 app_gamemodelgameID);; ARGS = []

致命錯誤 - 以下SQL查詢失敗:ALTER TABLE app_gameratingsmodel ADD CONSTRAINT game_id_refs_gameID_fe5d3728 外鍵(game_id)參考文獻 app_gamemodelgameID);

錯誤是:(1822, 「無法 添加外鍵constaint的約束 'game_id_refs_gameID_fe5d3728' 失蹤指數在引用表 'app_gamemodel'。」)

我不明白MySQL在談論什麼索引。誰能幫忙?

謝謝。

+0

你使用的是什麼版本的python? – ptr

+0

Python版本:2.7.2 – mynk

回答

1

您可能對app_gamemodel.gameID沒有UNIQUE約束。一個UNIQUE(或PRIMARY KEY,幾乎相同)需要數據庫能夠建立一個外鍵約束。

+0

謝謝mjl,但事實並非如此。我正在深入研究這兩個表的CREATE語句,並意識到它們具有不同的字符集。所以即使數據類型是varchar(32),這兩個字段也不具有相同的數據類型。 – mynk

1

好的,我想通了。事實證明,兩個表的列之間存在charset不匹配。

對於GameTable,字符集是utf8,因爲新字符串是使用charset latin創建的,因爲這是數據庫的默認字符集。 :)

2

當您嘗試引用具有不同數據類型的兩列(例如VARCHAR到INT或甚至INT到UINT!)時,通常會發生這種情況。我總是忘記檢查Workbench中的無符號標記:)

+0

我有同樣的問題,你的回答救了我。謝謝=) – Sara