MySQL DB in UTF8 konvertieren

In der Regel sollte man das Encoding für seine Datenbanken auf UTF8 stellen um später keine bösen Überraschungen zu erleben. Falls beim Entwicklungstart diese Einstellung vergessen wurde oder wenn man sich später zu UTF8 “bekennt” kann man folgendes Ruby-Script benutzen um die Datenbank zu konvertieren.

Ein Wort der Warnung: Wie immer sollte man IMMER ein Backup anlegen bevor man seine Daten in großem Stil verändert –> Ihr seid gewarnt!

Hier nun das Script:
Es ruft im Grunde die bekannten Shellscript-Befehle (iconv, mysqldump, etc.) auf um die Konvertierung durchzuführen.


class ConvertDbToUtf8

 def self.up

   db_name = 'DATENBANK-NAME'
   db_user = 'DATENBAK-BENUTZER'
   db_pass = 'DATENBANK-PASSWORT'
   db_host = 'DATENBANK-HOST'

   latin1_mysql_dump = 'latin1_mysql_dump.sql'
   utf8_mysql_dump = 'utf8_mwsql_dump.sql'

   print "DB-Dump holen.... "
   system "mysqldump --user=#{db_user} --password='#{db_pass}' --host=#{db_host} --add-drop-table --default-character-set=latin1 --insert-ignore --skip-set-charset #{db_name} > #{latin1_mysql_dump}"
   puts "...fertig"

   print "Konvertierung nach UTF8 starten... "
   system "iconv -f ISO-8859-1 -t UTF-8 #{latin1_mysql_dump} | sed 's/latin1/utf8/' > #{utf8_mysql_dump}"
   puts "...fertig"

   print "Datenbank neu anlegen"
   system "mysql --user=#{db_user} --password='#{db_pass}' --host=#{db_host} --execute=\"DROP DATABASE #{db_name};\""
   system "mysql --user=#{db_user} --password='#{db_pass}' --host=#{db_host} --execute=\"CREATE DATABASE #{db_name} CHARACTER SET utf8 COLLATE utf8_unicode_ci;\""
   puts "...fertig"

   print "Konvertierten UTF8 Dump einspielen..."
   system "mysql --user=#{db_user} --password='#{db_pass}' --host=#{db_host} --default-character-set=utf8 #{db_name} < #{utf8_mysql_dump}"
   puts "...fertig"

   puts " Konvertierung abgeschlossen "
 end

 def self.down
   raise "Konvertierung fehlgeschlagen"
 end

end

Eingestellt am 28.08.2009 um 08:00

Kategorie: Tutorials

Be Sociable, Share!

Kommentare für diesen Artikel wurden geschlossen.

Suchen auf rubyonrails.de

Aktuelle Rails Version + Abhängigkeiten:

Gem rails-3.0.0
actionmailer (= 3.0.0, runtime)
actionpack (= 3.0.0, runtime)
activerecord (= 3.0.0, runtime)
activeresource (= 3.0.0, runtime)
activesupport (= 3.0.0, runtime)
bundler (~> 1.0.0, runtime)
railties (= 3.0.0, runtime)

Rails auf Rubyforge
Rails auf Github