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.

[ruby wraplines=“true“]

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

[/ruby]

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.