【发布时间】:2010-11-03 05:30:15
【问题描述】:
使用 Postgres DB 的简单 rails 应用程序,在尝试插入 2176968859 时出现“整数超出范围”错误。应该是迁移的简单修复,但我不确定。现在我有...
create_table :targets do |t|
t.integer :tid
...
end
【问题讨论】:
使用 Postgres DB 的简单 rails 应用程序,在尝试插入 2176968859 时出现“整数超出范围”错误。应该是迁移的简单修复,但我不确定。现在我有...
create_table :targets do |t|
t.integer :tid
...
end
【问题讨论】:
当您声明该列时,这是您迁移中的魔法咒语:
create_table :example do |t|
t.integer :field, :limit => 8
end
:limit => 8 在这种情况下很神奇,因为当您只说整数时,postgres 只会处理带符号的 4 字节整数。这使用 8 字节有符号整数。
【讨论】:
有什么问题吗?你溢出来了。如果您需要这么大的数字,请使用 bigint。
http://www.postgresql.org/docs/8.3/interactive/datatype-numeric.html
【讨论】:
在 Rails 4 中。在迁移文件中,您可以将列定义为:
t.column :foobar, :bigint
如之前的答案所述,limit: 8 也将实现相同的目标
【讨论】:
PostgreSQL 整数是有符号的,没有无符号数据类型 - 我敢打赌这是你的问题。
如果您需要更大的值,请使用 bigint。如果 bigint 还不够,请使用 numeric - 但使用 bigint 而不是 numeric,除非您需要更大的大小或小数,因为它更快。
【讨论】:
注意http://www.postgresql.org/docs/8.3/interactive/datatype-numeric.html 中整数类型的允许值范围。我认为您将不得不使用 bigint、小数或双精度。
【讨论】: