【发布时间】:2016-05-17 21:03:23
【问题描述】:
我的应用程序中有一个自动递增的 ID 字段,对于 mysql 中的中等 int,该字段已达到 2147483647 的上限。我收到以下错误:
RangeError: 2147483656 is out of range for ActiveRecord::Type::Integer with limit 4
我创建了一个迁移以使 ID 成为 bigint:
change_column :my_model_names, :id, :integer, limit: 8, auto_increment: true
这似乎奏效了 - 这是 mysql 命令行中对该字段的描述:
+-----------------------------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------------+---------------+------+-----+---------+----------------+
| id | bigint(20) | NO | PRI | NULL | auto_increment |
+-----------------------------+---------------+------+-----+---------+----------------+
在 rails 控制台中,当我查询 MyModelName.columns 时,我可以看到该列看起来正确:
2.2.2 :045 > MyModelName.columns[0]
> #<ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter::Column:0x007f98bf6d6640 @strict=true, @collation=nil, @extra="auto_increment", @name="id", @cast_type=#<ActiveRecord::Type::Integer:0x007f98bf6e7490 @precision=nil, @scale=nil, @limit=8, @range=-9223372036854775808...9223372036854775808>, @sql_type="bigint(20)", @null=false, @default=nil, @default_function=nil>
它的 limit=8 和一个远远超过我试图保存的值的范围,但我仍然得到同样的错误:
2.2.2 :045 > MyModelName.new.save
RangeError: 2147483657 is out of range for ActiveRecord::Type::Integer with limit 4
有趣的是,自动增量值正在更新,即使记录没有保存。如果我再试一次,ID 值会增加:
RangeError: 2147483658 is out of range for ActiveRecord::Type::Integer with limit 4
版本信息
activerecord (4.2.5.1)
mysql2 (0.3.18)
【问题讨论】:
-
愚蠢的问题:您是否尝试重新加载您的 Rails 控制台?
-
是的 - 我什至重新启动了我的整个开发计算机。仍然得到相同的错误(除了它重置自动增量值 - 显然它存储在内存中)
标签: mysql ruby-on-rails activerecord