【问题标题】:Integer out of range on Postgres DBPostgres DB 上的整数超出范围
【发布时间】:2010-11-03 05:30:15
【问题描述】:

使用 Postgres DB 的简单 rails 应用程序,在尝试插入 2176968859 时出现“整数超出范围”错误。应该是迁移的简单修复,但我不确定。现在我有...

create_table :targets do |t|
   t.integer :tid
    ...
end

【问题讨论】:

    标签: ruby-on-rails postgresql


    【解决方案1】:

    当您声明该列时,这是您迁移中的魔法咒语:

    create_table :example do |t|
      t.integer :field, :limit => 8
    end
    

    :limit => 8 在这种情况下很神奇,因为当您只说整数时,postgres 只会处理带符号的 4 字节整数。这使用 8 字节有符号整数。

    【讨论】:

    • 我宁愿建议在表格的字段中更改/设置正确的数据类型
    【解决方案2】:

    有什么问题吗?你溢出来了。如果您需要这么大的数字,请使用 bigint。

    http://www.postgresql.org/docs/8.3/interactive/datatype-numeric.html

    【讨论】:

    • 感谢 nsanders。 'bigint' 是我一直在寻找的。对不起,如果我对每个人的问题表述得很糟糕!
    【解决方案3】:

    在 Rails 4 中。在迁移文件中,您可以将列定义为:

    t.column :foobar, :bigint
    

    如之前的答案所述,limit: 8 也将实现相同的目标

    【讨论】:

      【解决方案4】:

      PostgreSQL 整数是有符号的,没有无符号数据类型 - 我敢打赌这是你的问题。

      如果您需要更大的值,请使用 bigint。如果 bigint 还不够,请使用 numeric - 但使用 bigint 而不是 numeric,除非您需要更大的大小或小数,因为它更快。

      【讨论】:

        【解决方案5】:

        注意http://www.postgresql.org/docs/8.3/interactive/datatype-numeric.html 中整数类型的允许值范围。我认为您将不得不使用 bigint、小数或双精度。

        【讨论】:

        • 很好,知道如何以编程方式获取整数的最大数,这样如果有人输入一个巨大的数字,我就可以设置为零?我在 rails 中使用 pg gem。
        • @ryan2johnson9 不是随便的,但我敢打赌其他一些问题会回答这个问题;如果没有,问一个新的
        猜你喜欢
        • 2020-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多