我使用的是Rails 3.0.5。我正在使用MySQL作为数据库存储。我有一个模型,其中一个列需要是BIGINT。我在创建迁移文件中使用了以下内容:
t.column :my_column_name, :bigint效果很好。
但是,当我跑的时候
rake :迁移
生成的'schema.rb‘文件为特定列创建以下行:
t.integer "my_column_name", :limit => 8这是不对的。
我的问题是我哪里错了?为了得到正确的'schema.rb‘文件,我应该做些什么吗?我能改变生成'schema.rb‘文件的方式吗?
请注意,“schema.rb”文件错误这一事实给我的连续集成服务器带来了问题,它运行测试并使用'schema.rb‘文件从头创建数据库(在运行测试之前)。
发布于 2011-03-16 15:32:07
我现在意识到
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很明显,限制=> 8最终将在mysql中创建一个bigint。
https://stackoverflow.com/questions/5322864
复制相似问题