【问题标题】:how to enter an larger integer value(more than 10 digits) in rails [duplicate]如何在rails中输入更大的整数值(超过10位)[重复]
【发布时间】:2015-04-17 07:34:32
【问题描述】:

我创建了一个类似的模型

rails g model Office name:string location:string phone_no:integer

然后,如果我给 phone_no 10 位数的值,它会显示类似的错误

ActiveRecord::StatementInvalid: Mysql2::Error: Out of range value for column

我怎样才能给出超过 10 位的数字?

那么我该如何克服这个......!

【问题讨论】:

    标签: mysql ruby-on-rails ruby ruby-on-rails-4 activerecord


    【解决方案1】:

    我一直在数据库中使用string 类型列来保存电话号码。如果您出于某种原因需要一个 int 值,但我通常不需要,您可以稍后随时调用 .to_i

    优点是您可以在其表单字段中使用+ 字符来定义区号。

    缺点是您可能需要验证表单中字段的数量。

    【讨论】:

    • 也适用于前导 '0' 和类似的
    • +1,因为这是电话号码或其他类型数据的最佳做法,这些数据有数字,但实际上并未用于某种计算。
    • 我同意电话号码在概念上是一个恰好包含数字的字符串,应该这样表示。
    【解决方案2】:

    整数(4字节)有最大值范围:

    -2147483648  ->  2147483647
    0  ->  4294967295 (unsigned )
    

    由于溢出,您会收到此错误。你可以改用bigint,它有8个字节,你会没事的。

    -9223372036854775808  ->  9223372036854775807
    0  ->  18446744073709551615 (unsigned)
    

    【讨论】:

      【解决方案3】:

      如果您使用的是mysql,那么您可以像这样使用bigint

      change_column :user, :mobile, :int8, :limit => 8
      

      这个limit => 8 将使它成为bigint。

      希望这会有所帮助。

      【讨论】:

      • 我使用“change_column :model, :col, :double”。这适用于 MySQL 数据库(但我希望该项目使用 postgres)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多