数据库
首页 > 数据库> > Rails表中整数的默认大小(MySQL)

Rails表中整数的默认大小(MySQL)

作者:互联网

当我跑步

rails g model StripeCustomer user_id:integer customer_id:integer
annotate

我有

# == Schema Information
# Table name: stripe_customers
#  id          :integer(4)      not null, primary key
#  user_id     :integer(4)
#  customer_id :integer(4)
#  created_at  :datetime
#  updated_at  :datetime

这是否意味着我最多只能保存9,999条记录? (我很惊讶密钥的默认大小多么小).如何在现有表格中将默认ID更改为7位数字?

谢谢.

解决方法:

虽然mysql客户端的describe命令确实使用显示宽度(请参见docs),但OP问题中的模式信息很可能由annontate_models gem的get_schema_info方法生成,该方法使用每一列的limit属性. limit属性是:binary和:integer列的字节数(请参见docs).

该方法读取(请参阅最后一行如何添加限制):

def get_schema_info(klass, header, options = {})
  info = "# #{header}\n#\n"
  info << "# Table name: #{klass.table_name}\n#\n"

  max_size = klass.column_names.collect{|name| name.size}.max + 1
  klass.columns.each do |col|
    attrs = []
    attrs << "default(#{quote(col.default)})" unless col.default.nil?
    attrs << "not null" unless col.null
    attrs << "primary key" if col.name == klass.primary_key

    col_type = col.type.to_s
    if col_type == "decimal"
      col_type << "(#{col.precision}, #{col.scale})"
    else
      col_type << "(#{col.limit})" if col.limit
    end

    #...        
end

标签:activerecord,primary-key,ruby,ruby-on-rails,mysql
来源: https://codeday.me/bug/20191101/1986983.html