我们如何定义大整数? [复制]
Posted
技术标签:
【中文标题】我们如何定义大整数? [复制]【英文标题】:How do we define large integers? [duplicate] 【发布时间】:2011-09-15 04:46:50 【问题描述】:可能重复:Integer out of range on Postgres DB
当我的代码尝试将 100001857905525
等大数字插入 heroku 上的数据库时,我收到错误消息:
ActiveRecord::StatementInvalid (PGError: ERROR: integer out of range )
该列已被定义为整数。我使用 sqlite3 数据库。我的代码已部署到 heroku。
当我在本地主机上运行时它工作正常。但是只有当我在 heroku 上运行代码时才会出现上述错误。 也许我可以通过将列定义为长整数或双精度来解决这个问题。我如何在 Ruby/Rails 中做到这一点?
【问题讨论】:
这个问题已经在这里被问及回答了***.com/questions/999570/… SQLite 非常宽容(即所有文本都是文本,因此对字符串大小没有限制,查看他们的datatypes 似乎 int 会根据需要增长到 8 位),但是 PostgreSQL(什么 Heroku uses) 已针对性能进行了优化,因此您必须找到正确的类型。这是一种引入在开发中有效但在生产中无效的代码的巧妙方式。 【参考方案1】:在你的迁移中,你可以试试这个:
t.integer :uid, :limit => 8
这将产生一个 64 位整数列。
(根据PostgreSQL docs,仅integer
不指定limit
最多允许10 位数字。)
【讨论】:
像魅力一样工作。谢谢 列的默认值被设置为超过8位的数字,但它仍然可以工作,这是为列设置bigint的一种奇怪方式!更多信息请访问:moeffju.net/blog/using-bigint-columns-in-rails-migrations 我很好奇默认设置是什么。根据the docs,integer
的最大值为 2147483647(10 位),bigint
的最大值为 9223372036854775807(19 位)。 decimal
类型最多允许小数点前 131072 位!以上是关于我们如何定义大整数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章