Rails 2.1 broke my mysql foreign keys!
Tuesday, June 24th, 2008Rails 2.1 introduced in the MySQL Adapter “smart integer columns.” The idea was to use the :limit option to determine whether a smallint, int, or bigint should be used. This is something that the Postgres adapter had already previously implemented. The relevant code in activerecord/lib/active_record/connection_adapters/mysql_adapter.rb is:
# Maps logical Rails types to MySQL-specific data types.
def type_to_sql(type, limit = nil, precision = nil, scale = nil)
return super unless type.to_s == 'integer'
case limit
when 0..3
"smallint(#{limit})"
when 4..8
"int(#{limit})"
when 9..20
"bigint(#{limit})"
else
'int(11)'
end
end
Mirko Froehlich suggests monkey patching this function. Timothy Jones blogged about it.
To monkey-patch this, just drop a file (fix_mysql_adapter.rb) into your initializers/ directory, as such: