我正在尝试保存一个表示文件长度的数字(4825733517)。该列设置为integer类型。我没有设置任何验证或限制。
RangeError: 4825733517 is out of range for ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Integer with limit 4我应该对这个值使用其他列类型吗?(在rails 4.2.4上)
发布于 2015-11-04 17:04:01
对于integer类型的列,:limit值是以字节(documentation)为单位的最大列长度。
对于4字节长度,您可以存储的最大有符号整数是2,147,483,647,远远小于您的值4,825,733,517。您可以增加字节限制,例如将8字节增加为一个长整型( bigint PostgreSQL type),这将允许您存储最多9,223,372,036,854,775,807的有符号值。
您可以通过迁移来实现这一点,使用类似于rails generate migration change_integer_limit_in_your_table的代码创建它,并使用以下代码:
class ChangeIntegerLimitInYourTable < ActiveRecord::Migration
def change
change_column :your_table, :your_column, :integer, limit: 8
end
end发布于 2015-11-04 17:01:38
根据the PostgreSQL documentation,整数的范围从-2147483648到+2147483647。所以你的数字对于这种类型来说太大了。
更新您的列,并使用参数limit来指示您想要一个bigint。
change_column :table, :column, :integer, limit: 8发布于 2015-11-04 16:56:11
您应该通过迁移更改数据库中列的长度:
update_column :my_table, :my_column, :integer, limit: 12它将允许您存储更大的整数。
https://stackoverflow.com/questions/33517403
复制相似问题