如何在Rails 5迁移中为MySQL创建一个无符号INT?

如何在Rails 5迁移中为MySQL创建一个无符号INT?,mysql,ruby-on-rails,ruby-on-rails-5,Mysql,Ruby On Rails,Ruby On Rails 5,使用activerecord(=3.2)我能够使用activerecord mysql unsignedgem在我的mysql数据库中创建一个unsigned INT,但是没有对该gem进行任何更新,我也找不到任何关于Rails 5中对其本机支持的文档 在add_column方法中是否有一个选项散列或其他可以调用的东西来实现这一点?从Rails 5.1.x开始,有一个用于无符号整数、bigint、decimal和float的选项 在您的迁移中类似这样的东西将在Rails 5.1.4中工作 d

使用
activerecord(<5.0,>=3.2)
我能够使用
activerecord mysql unsigned
gem在我的mysql数据库中创建一个unsigned INT,但是没有对该gem进行任何更新,我也找不到任何关于Rails 5中对其本机支持的文档


在add_column方法中是否有一个选项散列或其他可以调用的东西来实现这一点?

从Rails 5.1.x开始,有一个用于无符号整数、bigint、decimal和float的选项

在您的迁移中类似这样的东西将在Rails 5.1.4中工作

  def up
    create_table :unsigned_columns do |t|

      t.integer "positive", :unsigned => true

      t.timestamps
    end
  end

如果您使用rails>5.1,并且希望所有主键都以
unsigned integer
作为默认类型生成,则只需在
config/application.rb
中调整生成器,添加以下代码:

config.generators do |g|
      # ... other configurations
      g.orm :active_record, primary_key_type: :unsigned_integer
end

通过调用
rails generate model foo bar:string
id
创建为unsigned。

默认情况下有没有办法做到这一点。i、 e.就像覆盖Rails 3和4中的
原生数据库类型一样。因此,默认情况下,新表是使用BigInt Unsigned
id
列创建的?@JoshuaPinter这是我不建议覆盖默认值的地方之一,而是在迁移中明确说明这些修改。您可以修改生成器以自动进行默认更改。因此,不必每次都手工编写迁移。我确实认为在Rails中使用MySQL时,
unsigned
应该是主键的默认值。我创建了一个GitHub问题来表示这个偏好,Rafael似乎同意,所以我将编写一个PR,以使主键成为Rails 6.2中的默认值
unsigned bigint
。请在这个问题上表示您的支持:我同意默认为unsigned。从那个GH问题看,您已经有了更改它的功能请求。这里我要补充的唯一一件事是,性能回归测试已经完成。对于大多数中小型项目来说,大约40亿个id对象就足够了。从4字节存储移动到8字节存储可能会线性甚至指数地增加列遍历和检索时间。这一点我绝对同意。但是默认的列类型已经是
bigint
。这在Rails 5.1()中进行了更改。我要做的唯一更改是使用
无符号
而不是
有符号
。这在性能上应该不会有任何变化,对吗?