6

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

t.column  :my_column_name,       :bigint

效果很好。

但是,当我跑步时

耙分贝:迁移

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

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

这是不正确的。

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

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

4

1 回答 1

9

我现在意识到

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

使用 my_sql 驱动程序在 schema.rb 文件中是正确的。

使用“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。

于 2011-03-16T15:32:07.033 回答