Moin,
auch auf die Gefahr hin, dass ihr zur "Mein Zeichensatz sieht so grumpelig aus kann ich echt nicht mehr Hören"-Gruppe gehört - ich selbst dachte bis vor kurzem noch, Zeichensätze hätte ich im Griff - möchte ich mich trotzdem kurz an einer Problemskizze versuchen...
Aufgabe: Umzug von Tabellen aus Datenbank A nach Datenbank B.
Problem: Die Tabellen aus Datenbank A sind in latin1 codiert, die in Datenbank B sollen utf8 werden.
Lösungsansatz bisher:
1. Export des Schemas aus Datenbank A
2. Anpassen der Schema-Datei gemäß UTF-8 (DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci)
3. Aufsetzen des Schemas in Datenbank B
4. Export der Tabelleninhalte aus Datenbank A
5. Import der Inhalte in das Schema der Datenbank B
Annahme: Wenn das Schema auf UTF-8 basiert und der Import in Schritt 5. einfache INSERT-Statements sind (mysqldump) konvertiert MySQL da schon irgendwie nach UTF-8.
Meine Annahme hat sich natürlich nicht bestätigt.
Um herauszubekommen, was CONVERT() in MySQL überhaupt so tut, hab ich mal folgendes ausprobiert:
Wie erwartet, konnte ich hier einen Unterschied ausmachen...
So weit so gut...
Jetzt will ich noch mal genauer prüfen, was in der Tabelle so angekommen ist:
Ok, was in der Tabelle steht ist immer noch latin1. Soweit ich weiß passt das ja auch. Ist dieses ISO-8859-Dings nicht eine Teilmenge von UTF-8? Die Dinge aus dem 1. Semester sind lange her...
Mein nächster Ansatz soll so aussehen:
Bevor ist das mache hab ich folgendes ausprobiert:
Meine Oma würde jetzt sagen: "Schock-schwere-Not!!einself!!"
...denn wieso sehe ich da keine Unterschiede in den konvertierten hex-Werten?
Ihr merkt, ich komme hier gerade so überhaupt nicht weiter.
Deshalb bin ich für jeden Tipp oder (Denk-) Fehlerhinweis dankbar!
Beste Grüße aus Kiel,
der Hauke
auch auf die Gefahr hin, dass ihr zur "Mein Zeichensatz sieht so grumpelig aus kann ich echt nicht mehr Hören"-Gruppe gehört - ich selbst dachte bis vor kurzem noch, Zeichensätze hätte ich im Griff - möchte ich mich trotzdem kurz an einer Problemskizze versuchen...
Aufgabe: Umzug von Tabellen aus Datenbank A nach Datenbank B.
Problem: Die Tabellen aus Datenbank A sind in latin1 codiert, die in Datenbank B sollen utf8 werden.
Lösungsansatz bisher:
1. Export des Schemas aus Datenbank A
2. Anpassen der Schema-Datei gemäß UTF-8 (DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci)
3. Aufsetzen des Schemas in Datenbank B
4. Export der Tabelleninhalte aus Datenbank A
5. Import der Inhalte in das Schema der Datenbank B
Annahme: Wenn das Schema auf UTF-8 basiert und der Import in Schritt 5. einfache INSERT-Statements sind (mysqldump) konvertiert MySQL da schon irgendwie nach UTF-8.

Meine Annahme hat sich natürlich nicht bestätigt.
Um herauszubekommen, was CONVERT() in MySQL überhaupt so tut, hab ich mal folgendes ausprobiert:
Code:
SET NAMES latin1; SELECT CONVERT( 'äöüß' USING utf8 ) AS utf8, HEX( CONVERT( 'äöüß' USING utf8 ) ) AS hex_utf8, CONVERT( 'äöüß' USING latin1 ) AS latin1, HEX( CONVERT( 'äöüß' USING latin1) ) AS hex_latin1;
Code:
+------+------------------+--------+------------+ | utf8 | hex_utf8 | latin1 | hex_latin1 | +------+------------------+--------+------------+ | äöüß | C3A4C3B6C3BCC39F | äöüß | E4F6FCDF | +------+------------------+--------+------------+
Jetzt will ich noch mal genauer prüfen, was in der Tabelle so angekommen ist:
Code:
SET NAMES utf8; SELECT ueberschrift FROM onlinedb_angebote WHERE agnr = 'C30130'; +--------------------------------------------------------------------------+ | ueberschrift | +--------------------------------------------------------------------------+ | (;-) Möbl.1-Zi-WG,&Duschbad,Kühlschrank,Kochstelle,Mikrowelle (-;) | +--------------------------------------------------------------------------+ SET NAMES latin1; SELECT ueberschrift FROM onlinedb_angebote WHERE agnr = 'C30130'; +------------------------------------------------------------------------+ | ueberschrift | +------------------------------------------------------------------------+ | (;-) Möbl.1-Zi-WG,&Duschbad,Kühlschrank,Kochstelle,Mikrowelle (-;) | +------------------------------------------------------------------------+
Mein nächster Ansatz soll so aussehen:
Code:
SET NAMES utf8; UPDATE onlinedb_angebote SET ueberschrift = CONVERT( ueberschrift USING utf8 );
Code:
SELECT SUBSTR( ueberschrift, 1, 10 ) as quelle, SUBSTR( CONVERT( ueberschrift USING latin1 ), 1, 10 ) AS quelle_latin1, SUBSTR( CONVERT( ueberschrift USING utf8 ), 1, 10 ) AS quelle_utf8, SUBSTR( HEX( ueberschrift ), 1, 10 ) AS hex_quelle, SUBSTR( HEX( CONVERT( ueberschrift USING latin1 ) ), 1, 10 ) AS hex_latin1, SUBSTR( HEX( CONVERT( ueberschrift USING utf8 ) ), 1, 10 ) AS hex_utf8 FROM onlinedb_angebote WHERE agnr = 'C30130';
...denn wieso sehe ich da keine Unterschiede in den konvertierten hex-Werten?
Code:
+------------+---------------+-------------+------------+------------+------------+ | quelle | quelle_latin1 | quelle_utf8 | hex_quelle | hex_latin1 | hex_utf8 | +------------+---------------+-------------+------------+------------+------------+ | (;-) Möbl. | (;-) Möbl. | (;-) Möbl. | 283B2D2920 | 283B2D2920 | 283B2D2920 | +------------+---------------+-------------+------------+------------+------------+
Deshalb bin ich für jeden Tipp oder (Denk-) Fehlerhinweis dankbar!
Beste Grüße aus Kiel,
der Hauke
Kommentar