diff --git a/activerecord/CHANGELOG b/activerecord/CHANGELOG index 3248594c19..9f013c5377 100644 --- a/activerecord/CHANGELOG +++ b/activerecord/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* Added that the MySQL adapter should map integer to either smallint, int, or bigint depending on the :limit just like PostgreSQL [DHH] + * Change validates_uniqueness_of :case_sensitive option default back to true (from [9160]). Love your database columns, don't LOWER them. [rick] * Add support for interleaving migrations by storing which migrations have run in the new schema_migrations table. Closes #11493 [jordi] diff --git a/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb b/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb index 6432c3cfee..2cc4157d16 100755 --- a/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb @@ -463,6 +463,22 @@ module ActiveRecord execute "ALTER TABLE #{quote_table_name(table_name)} CHANGE #{quote_column_name(column_name)} #{quote_column_name(new_column_name)} #{current_type}" end + # 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 + # SHOW VARIABLES LIKE 'name' def show_variable(name)