Created
December 27, 2010 21:41
-
-
Save russ/756585 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class ConvertDatabaseToUtf8 < ActiveRecord::Migration | |
def self.up | |
db_config = ActiveRecord::Base.connection.instance_values["config"] | |
db_name = db_config[:database] | |
db_user = db_config[:username] | |
db_pass = db_config[:password] || '' | |
latin1_dump = 'latin1_dump.sql' | |
utf8_dump = 'utf8_dump.sql' | |
print "Dumping database... " | |
system "mysqldump --user=#{db_user} --password='#{db_pass}' --add-drop-table --default-character-set=latin1 --insert-ignore --skip-set-charset #{db_name} | sed 's/“/\"/' | sed 's/”/\"/' > #{latin1_dump}" | |
puts "done" | |
print "Replacing Smart Quotes... " | |
replace_path = "/usr/local/mysql/bin/replace" | |
#replace_path = "/opt/local/lib/mysql5/bin/replace" | |
system "#{replace_path} '√Ç' '' '¬°' '¡' '\342\200\230' '‘' '\342\200\231' '’' '\342\200\234' '“' '\342\200\235' '”' '\303\302' '' '\302\241' '¡' '\303\203\302\255' i '\303\242\357\277\275' '“' '\303\242\357\277\275\302\235' '“' '\303\242\302\200\302\234' '”' -- #{latin1_dump}" | |
print "Converting dump to UTF8... " | |
system "iconv -f latin1 -t utf8 #{latin1_dump} | sed 's/latin1/utf8/' | sed 's/COLLATE=latin1_general_ci/COLLATE=utf8_general_ci/' > #{utf8_dump}" | |
puts "done" | |
print "Recreating database..." | |
system "mysql --user=#{db_user} --password='#{db_pass}' --execute=\"DROP DATABASE #{db_name};\"" | |
system "mysql --user=#{db_user} --password='#{db_pass}' --execute=\"CREATE DATABASE #{db_name} CHARACTER SET utf8 COLLATE utf8_general_ci;\"" | |
puts "done" | |
print "Importing UTF8 dump..." | |
system "mysql --user=#{db_user} --password='#{db_pass}' --default-character-set=utf8 #{db_name} < #{utf8_dump}" | |
puts "done" | |
puts " *** don't forget to delete temp files #{latin1_dump} and #{utf8_dump}" | |
end | |
def self.down | |
raise ActiveRecord::IrreversibleMigration, "Can't revert UTF8 migration." | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment