如何使Rails生成'schema.rb'与MySQL的bigint支持?

时间:2011-03-16 08:49:23

标签: mysql ruby-on-rails bigint schema.rb

我正在使用Rails 3.0.5。我使用MySQL作为数据库存储。我有一个模型,其中一列需要是BIGINT。我在创建迁移文件中使用以下内容:

t.column  :my_column_name,       :bigint

工作正常。

然而,当我跑

  

rake db:migrate

生成的'schema.rb'文件为特定列创建以下行:

t.integer  "my_column_name",       :limit => 8

这是不正确的。

我的问题是我错在哪里?为了获得正确的'schema.rb'文件,我应该做些什么吗?我可以更改'schema.rb'文件的生成方式吗?

请注意,'schema.rb'文件错误这一事实会导致我的持续集成服务器出现问题,该服务器运行测试并使用'schema.rb'文件从头开始创建数据库(在运行测试之前)。

1 个答案:

答案 0 :(得分:9)

我现在意识到了

t.integer "my_column_name", :limit => 8
带有my_sql驱动程序的

在schema.rb文件中是CORRECT。

使用'schema.rb'文件生成的数据库会创建

bigint(20)

虽然这看起来很奇怪。

我通过调查my_sql适配器的代码找到了这个,我在这里引用它的片段:

 def type_to_sql(type, limit = nil, precision = nil, scale = nil)
       return super unless type.to_s == 'integer'
        case limit
        when 1; 'tinyint'
        when 2; 'smallint'
        when 3; 'mediumint'
        when nil, 4, 11; 'int(11)'  # compatibility with MySQL default
        when 5..8; 'bigint'
        else raise(ActiveRecordError, "No integer type has byte size #{limit}")
        end
      end

很明显,那里:limit => 8将最终在mysql db中创建一个bigint。