- 论坛徽章:
- 0
|
migrate中使用bigint
使用mysql时,integer最大是10位。如果想存储更大的数字就要使用BIGINT。比如现在QQ号已经有11位,很快就12位了。
Ruby代码- 1.# activerecord-3.0.7/lib/active_record/connection_adapters/mysql_adapter.rb
- 2.def type_to_sql(type, limit = nil, precision = nil, scale = nil)
- 3. return super unless type.to_s == 'integer'
- 4.
- 5. case limit
- 6. when 1; 'tinyint'
- 7. when 2; 'smallint'
- 8. when 3; 'mediumint'
- 9. when nil, 4, 11; 'int(11)' # compatibility with MySQL default
- 10. when 5..8; 'bigint'
- 11. else raise(ActiveRecordError, "No integer type has byte size #{limit}")
- 12. end
- 13.end
- # 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列。
Ruby代码- 1.t.integer :qq, :limit => 8
- t.integer :qq, :limit => 8
复制代码 如果想设置id为bigint,还要在create_table时传递:id => false,然后手动指定id列。
Ruby代码- 1.def self.up
- 2. create_table :demo, :id => false do |t|
- 3. t.integer :id, :limit => 8
- 4.end
- def self.up
- create_table :demo, :id => false do |t|
- t.integer :id, :limit => 8
- end
复制代码 |
|