2013-02-26 50 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查询尝试保存。

感谢您的阅读,非常感谢您的任何帮助。

回答