Skip to content

Commit

Permalink
Fix charset/collate in mysql recreate_database
Browse files Browse the repository at this point in the history
See new method mysql_creation_options. It is used by both
create_database and recreate_database so they are consistent.

(Cherry pick of 3ba3125)
  • Loading branch information
simonbaird committed Jul 6, 2011
1 parent 78ff00d commit ecd3708
Showing 1 changed file with 8 additions and 5 deletions.
13 changes: 8 additions & 5 deletions activerecord/lib/active_record/railties/databases.rake
Expand Up @@ -44,6 +44,12 @@ db_namespace = namespace :db do
create_database(ActiveRecord::Base.configurations[Rails.env]) create_database(ActiveRecord::Base.configurations[Rails.env])
end end


def mysql_creation_options(config)
@charset = ENV['CHARSET'] || 'utf8'
@collation = ENV['COLLATION'] || 'utf8_unicode_ci'
{:charset => (config['charset'] || @charset), :collation => (config['collation'] || @collation)}
end

def create_database(config) def create_database(config)
begin begin
if config['adapter'] =~ /sqlite/ if config['adapter'] =~ /sqlite/
Expand All @@ -67,9 +73,6 @@ db_namespace = namespace :db do
rescue rescue
case config['adapter'] case config['adapter']
when /mysql/ when /mysql/
@charset = ENV['CHARSET'] || 'utf8'
@collation = ENV['COLLATION'] || 'utf8_unicode_ci'
creation_options = {:charset => (config['charset'] || @charset), :collation => (config['collation'] || @collation)}
if config['adapter'] =~ /jdbc/ if config['adapter'] =~ /jdbc/
#FIXME After Jdbcmysql gives this class #FIXME After Jdbcmysql gives this class
require 'active_record/railties/jdbcmysql_error' require 'active_record/railties/jdbcmysql_error'
Expand All @@ -80,7 +83,7 @@ db_namespace = namespace :db do
access_denied_error = 1045 access_denied_error = 1045
begin begin
ActiveRecord::Base.establish_connection(config.merge('database' => nil)) ActiveRecord::Base.establish_connection(config.merge('database' => nil))
ActiveRecord::Base.connection.create_database(config['database'], creation_options) ActiveRecord::Base.connection.create_database(config['database'], mysql_creation_options(config))
ActiveRecord::Base.establish_connection(config) ActiveRecord::Base.establish_connection(config)
rescue error_class => sqlerr rescue error_class => sqlerr
if sqlerr.errno == access_denied_error if sqlerr.errno == access_denied_error
Expand Down Expand Up @@ -443,7 +446,7 @@ db_namespace = namespace :db do
case abcs['test']['adapter'] case abcs['test']['adapter']
when /mysql/ when /mysql/
ActiveRecord::Base.establish_connection(:test) ActiveRecord::Base.establish_connection(:test)
ActiveRecord::Base.connection.recreate_database(abcs['test']['database'], abcs['test']) ActiveRecord::Base.connection.recreate_database(abcs['test']['database'], mysql_creation_options(abcs['test']))
when /postgresql/ when /postgresql/
ActiveRecord::Base.clear_active_connections! ActiveRecord::Base.clear_active_connections!
drop_database(abcs['test']) drop_database(abcs['test'])
Expand Down

0 comments on commit ecd3708

Please sign in to comment.