Rails - MySQL自动增量id列类型更改

时间:2015-12-26 19:23:29

标签: mysql ruby-on-rails database biginteger integer-overflow

我有一个拥有大量模型和数据库表的rails网站。 在所有这些中,我想将:id主键列更改为bigint而不是int,因为它将跨越MySQL的整数int(11)限制。

我不想使用他们建议我们做的其他帖子中建议的方法:id =>创建表并添加自定义列时为false:id指定大小。

我已经有很多数据了,我不希望id列ids也改变,因为我正在使用它来处理一些has_many belongs_to关系并且可以打破所有链接。

请建议我如何将int(11)中的change_column id更改为bigint,而无需重新创建表和/或丢失数据和id值

2 个答案:

答案 0 :(得分:12)

不要忘记auto_increment: true

class NameOfYourMigration < ActiveRecord::Migration
  def up
    change_column :table_name, :id, :integer, limit: 8, auto_increment: true
  end

  def down
    change_column :table_name, :id, :integer, auto_increment: true
  end
end

答案 1 :(得分:1)

试一试

进行如下所示的迁移:

class NameOfYourMigration < ActiveRecord::Migration

    def up
        change_column :table_name, :id, :integer, limit: 8 # <-- makes the column type bigint
    end

    def down
        change_column :table_name, :id, :integer
    end

end
相关问题