2013-02-26 51 views
0

我有一個幾乎完成的Rails 3.2.11應用程序,我一直在用SQLite3進行開發。它與SQLite3完美配合。現在我想切換到MySQL的其餘發展,但出了問題。Rails活動記錄重複項mysql錯誤

我在'feed_entries'表的'guid'列上有一個唯一的索引。應用程序首先檢查是否存在具有相同'guid'的記錄,並且只有在沒有具有相同guid的記錄時才創建新記錄。出於某種原因,guid正在被更改爲一個特定的號碼,因此只有一條記錄被保存。

以下是錯誤:

ActiveRecord::RecordNotUnique: Mysql::Error: Duplicate entry '2147483647' for key 'index_feed_entries_on_guid' 

這裏是正在嘗試的記錄得到保存:

FeedEntry Exists (0.3ms) SELECT 1 AS one FROM `feed_entries` WHERE `feed_entries`.`guid` = 3577996865 LIMIT 1 
SQL (0.1ms) BEGIN 
FeedEntry Exists (0.3ms) SELECT 1 AS one FROM `feed_entries` WHERE `feed_entries`.`guid` = BINARY 3577996865 LIMIT 1 
SQL (1.0ms) INSERT INTO `feed_entries` (`guid`) VALUES (?) [["guid", 3577996865]] 
(1.0ms) COMMIT 
FeedEntry Exists (0.2ms) SELECT 1 AS one FROM `feed_entries` WHERE `feed_entries`.`guid` = 3643574649 LIMIT 1 
SQL (0.1ms) BEGIN 
FeedEntry Exists (0.3ms) SELECT 1 AS one FROM `feed_entries` WHERE `feed_entries`.`guid` = BINARY 3643574649 LIMIT 1 
SQL (1.6ms) INSERT INTO `feed_entries` (`guid`) VALUES (?) [["guid", 3643574649]] 
(0.8ms) ROLLBACK 

我扯下了不重要的部分。該表有20多列,但是guid是創建記錄時唯一有意義的列,所以爲了簡潔和便於閱讀,我刪除了其餘信息。

正如你所看到的,它顯示出它正在用適當的guid保存它們,但是然後錯誤顯示它試圖用guid 2147483647保存。出錯後,表只有一條記錄,儘管它表明記錄被保存爲guid 3577996865,當它從db中獲取時,它具有錯誤(2147483647)中顯示的guid。我不明白爲什麼它將guid轉換爲這個數字。

也許它與在GUID之前說BINARY的第二個Exists語句有關?當我將分支切換到仍然使用SQLite數據庫的分支時,每個記錄只有一個Exists查詢嘗試保存。

感謝您的閱讀,非常感謝您的任何幫助。

回答