我正在使用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'文件从头开始创建数据库(在运行测试之前)。
答案 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。