首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PostgreSQL数据库中的整数超出范围

PostgreSQL数据库中的整数超出范围
EN

Stack Overflow用户
提问于 2015-11-04 16:52:30
回答 3查看 11K关注 0票数 17

我正在尝试保存一个表示文件长度的数字(4825733517)。该列设置为integer类型。我没有设置任何验证或限制。

代码语言:javascript
复制
RangeError: 4825733517 is out of range for ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Integer with limit 4

我应该对这个值使用其他列类型吗?(在rails 4.2.4上)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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的代码创建它,并使用以下代码:

代码语言:javascript
复制
class ChangeIntegerLimitInYourTable < ActiveRecord::Migration
  def change
    change_column :your_table, :your_column, :integer, limit: 8
  end 
end
票数 31
EN

Stack Overflow用户

发布于 2015-11-04 17:01:38

根据the PostgreSQL documentation,整数的范围从-2147483648到+2147483647。所以你的数字对于这种类型来说太大了。

更新您的列,并使用参数limit来指示您想要一个bigint

代码语言:javascript
复制
change_column :table, :column, :integer, limit: 8
票数 4
EN

Stack Overflow用户

发布于 2015-11-04 16:56:11

您应该通过迁移更改数据库中列的长度:

代码语言:javascript
复制
update_column :my_table, :my_column, :integer, limit: 12

它将允许您存储更大的整数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33517403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档