Gentoo Archives: gentoo-user-de

From: Bernd Wurst <bernd@××××××.org>
To: gentoo-user-de@l.g.o
Subject: Re: [gentoo-user-de] MySQL-DBs ohne Verlust migrieren
Date: Tue, 28 Nov 2006 06:55:27
Message-Id: 200611280753.56058.bernd@bwurst.org
In Reply to: [gentoo-user-de] MySQL-DBs ohne Verlust migrieren by Sebastian Damm
1 Hallo.
2
3 Am Dienstag, 28. November 2006 00:38 schrieb Sebastian Damm:
4 > Systeminformationen:
5 > Alt Neu
6 > MySQL 4.1.15 MySQL 5.0.26
7 > Locale latin9 Locale utf8
8
9 Auf einem System, das grundsätzlich auf latin9 hochgezogen ist, fällt es
10 natürlich schwer, fernöstliche Zeichen korrekt zu speichern...
11
12
13 > Nun hab ich mich natürlich gefragt, wie ich das am besten gerade biegen
14 > kann. Soweit ich weiß, speichert MySQL ab Version 4.1 die Daten schon
15 > in UTF8 ab, also sollten die schon korrekt vorliegen. Ich habe
16
17 Jein.
18 MySQL hat (zumindest in Version 5) eine strikte Trennung zwischen Speicherung
19 und Präsentation im Frontend. Leider wissen das viele nicht. ;-)
20
21 Irgendwo mitten in den 4.1.*-Versionen gab es einen Bruch, vorher kommt MySQL
22 nicht korrekt mit den Zeichensätzen umgehen. Ob es vor oder nach 4.1.15 war,
23 weiß ich nicht.
24
25 Teste bitte:
26 greife mit einer Locale (und schriftart) die alle deine Zeichen anzeigen kann
27 auf den MySQL-Server zu (mit dem Konsolenprogram). Dann gib als erstes den
28 Befehl "SET NAMES utf8;" ein. Oder eben mit deiner anderen locale, aber UTF8
29 ist halt die beste für den Zweck.
30
31 Lies dann mit SELECT * FROM foobar; eine Tabelle aus, die solche Zeichen
32 enthält.
33 Wenn das alles korrekt rauskommt, dann ist es trivial, dann hat MySQL es
34 intern schon korrekt gespeichert. Dann kannst du ganz einfach die
35 my.cnf-Direktive
36 init-connect='SET NAMES utf8'
37 in die my.cnf eintragen und mit mysqldump einen UTF8-codierten dump erzeugen.
38
39 Wenn du oben aber Schrott bekommst, dann ist genau das schlimme passiert:
40 MySQL hat die Daten die da kommen mehr oder weniger Binär gespeichert. Also es
41 macht keine Prüfung und keine Konversion sondern speichert die codierte
42 Version so wie sie kommt. Solange man immer den selben Weg zur Ausgabe wählt,
43 der auch zur Eingabe benutzt wurde, ist das kein Thema, es wird dann gleich
44 repräsentiert. Nur ist es dann ein anderer Charset als MySQL vielleicht
45 denkt.
46
47
48 > Alle hatten nicht den gewünschten Erfolg. Die mittlere Variante sah am
49 > schlimmsten aus, deshalb nehme ich mal an, dass die Daten schon in UTF8
50 > vorliegen.
51
52 Ich tippe auf einen Datensalat.
53 Also manches UTF8-codiert und manches nicht. Sehen denn wirklich alle
54 Webseiten auf dem alten System korrekt aus?
55
56
57 > Wenn ich mir die DB im phpMyAdmin anschaue, sind die Sonderzeichen
58 > sowohl im alten als auch im neuen System verrissen.
59
60 phpMyAdmin setzt den Zeichensatz wie ich oben schrieb, es ist also
61 wahrscheinlich, dass obiges ebenfalls nicht funktioniert.
62 Dann kommst du mit MySQL-Werkzeugen nicht mehr weiter. Du solltest den
63 MySQL-dump sichern und mit Text-Konversions-Werkzeugen irgendwie herausfinden
64 was wie codiert ist und wie du es nach UTF-8 konvertieren könntest.
65
66
67 > Achja, eine Erschwerniss hab ich noch: In dem Blog sind ein paar
68 > Einträge auf chinesisch geschrieben (oder zumindest Teile), d.h.
69 > Konvertieren in Latin9 fällt aus.
70
71 Kann es sein, dass die westlichen Zeichen als latin9 und die fernöstlichen
72 Zeichen als whatever-Zeichensatz gespeichert sind? Wurden die echt vorher
73 korrekt angezeigt? Ich kann mir das jetzt so garnicht vorstellen...
74
75
76 > Da das sicher schon mal jemand gemacht hat, weiß doch hier sicher
77 > jemand Rat, oder? Danke schonmal.
78
79 Ich hatte mal die Situation, dass alte Einträge aners codiert waren als neue.
80 Das habe ich Aufwand/Nutzen-mäßig dann aber ignoriert, wäre viel Arbeit
81 gewesen...
82
83 cu, Bernd
84
85 --
86 Windows Error 01E: Timing error. Please wait. And wait. And wait.

Replies

Subject Author
Re: [gentoo-user-de] MySQL-DBs ohne Verlust migrieren Sebastian Damm <lists@×××××.de>