Rails 3中添加unsigned int列的迁移



我想生成一个迁移,将一列添加到一个数据类型为unsigned int的表中。我希望使用它来存储本文中提到的IP地址。

我遇到了这个问题,但它会使迁移数据库依赖,任何想法如何以更好的方式做到这一点?

这里展示了一个可行的解决方案,它可以让您在rails迁移中更本地地完成它:在Ruby on rails迁移中使用unsigned int字段?

为了长寿起见,答案是在您的选项中为无类型列添加自定义规范:

t.column :population, 'integer unsigned'

我相信使用'integer unsigned'是合理的与数据库无关,但可能不是100%。如果你想把自己锁定在一个特定的数据库中,你也可以使用像'BIGINT unsigned'这样的东西。

我对Geoff的回答也有点失望,因为它似乎完全忽略了一个事实,即使用相同存储空间的无符号整数包含不同的数据集。如果您知道不需要负数,并且对优化数据存储需求感兴趣,则无符号整型很有价值。要查看mysql的指南,请参见:http://dev.mysql.com/doc/refman/5.5/en/integer-types.html

请注意下面的JellicleCat的注释,即模式文件不会跟踪此更改,因此当模式加载时,列的带符号方面将丢失。

第一步:

添加activeecord -mysql-unsigned到GemFile

# add unsigned integer support to mysql2 adapter
gem "activerecord-mysql-unsigned", "~> 0.0.1"

步骤2:安装宝石

bundle install

步骤3:

在你喜欢的字段中使用"unsigned: true"

t.integer :cost, unsigned: true

reference: http://rubydoc.info/gems/activerecord-mysql-unsigned/0.0.1/frames

您可以通过执行SQL查询来实现,

在MySQL查询的情况下将是

添加新列

ALTER TABLE table_name ADD column_name INT unsigned;

删除列

ALTER TABLE table_name DROP column_name;

And migration:

class MyMigration < ActiveRecord::Migration
  def self.up
    execute "ALTER TABLE table_name ADD column_name INT unsigned;"
  end
  def self.down
     execute "ALTER TABLE table_name DROP column_name;"
  end
end

对不起。Unsigned不是Rails支持的数据类型之一。

请参见下面指南的1.4节。

http://guides.rubyonrails.org/migrations.html

我不知道你为什么认为你需要unsigned。整数和无符号都使用相同的位数,有符号只是表示您希望将其中一个位解释为有符号位的约定。如果你赋值的符号位是开的,数据库会认为这是一个负数,但你会知道得更好,你可以笑着对自己说,你仍然比机器聪明。

相关内容

  • 没有找到相关文章

最新更新