使用mysql时,integer最大是10位。如果想存储更大的数字就要使用BIGINT。比如现在QQ号已经有11位,很快就12位了。
?
# activerecord-3.0.7/lib/active_record/connection_adapters/mysql_adapter.rb 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 => 5/6/7/8来得到一个bigint列。
?
t.integer :qq, :limit => 8
?
如果想设置id为bigint,还要在create_table时传递:id => false,然后手动指定id列。
?
def self.up create_table :demo, :id => false do |t| t.integer :id, :limit => 8 end
?