dump von einem encoding im anderen importieren

dump von einem encoding im anderen importieren

am 19.11.2006 00:40:11 von official

Hallo Gemeinde,

Auch Suchen bei groups.google hat mir nicht weitergeholfen. Folgendes
Problem:

Auf einem Rechner läuft eine MySQL-Datenbank. Standard-Encoding ist utf-8.
Manche Tabellen einer bestimmten Datenbank sind latin1. Diese Tabellen
werden über ein CMS von einem apache mit latin1 gefüllt und ausgelesen. Das
funktioniert.

Nun soll diese Datenbank auf einen anderen Rechner überführt werden. Also
mysqldump, das File per scp übertragen, in MySQL eingelesen.

Auch hier werden die Tabellen über ein CMS von apache2 ausgegeben.
Allerdings exportiert MySQL als utf-8. Obwohl Datenbank und alle Tabellen
latin1 beim CREATE mitbekommen haben, und obwohl das Dumpfile mit allen
Tricks nach latin1 gewandelt wurde. Und so habe ich mitten im latin1-Text
utf-8-Zeichen.

Was mache ich da alles falsch?

mfg
Christian

Re: dump von einem encoding im anderen importieren

am 19.11.2006 01:51:57 von Axel Schwenke

"Christian H. Kuhn" wrote:

> Folgendes Problem:
>
> Auf einem Rechner läuft eine MySQL-Datenbank. Standard-Encoding ist utf-8.
> Manche Tabellen einer bestimmten Datenbank sind latin1. Diese Tabellen
> werden über ein CMS von einem apache mit latin1 gefüllt und ausgelesen. Das
> funktioniert.
>
> Nun soll diese Datenbank auf einen anderen Rechner überführt werden. Also
> mysqldump, das File per scp übertragen, in MySQL eingelesen.
>
> Auch hier werden die Tabellen über ein CMS von apache2 ausgegeben.
> Allerdings exportiert MySQL als utf-8. Obwohl Datenbank und alle Tabellen
> latin1 beim CREATE mitbekommen haben, und obwohl das Dumpfile mit allen
> Tricks nach latin1 gewandelt wurde.

*Wer* hat das Dumpfile umgewandelt? Und vor allem *warum*?

> Und so habe ich mitten im latin1-Text utf-8-Zeichen.
>
> Was mache ich da alles falsch?

Wenn du das Dumpfile konvertiert hast, war *das* der Fehler.

Seit einer frühen 4.1 Version schreibt mysqldump prinzipiell alle Dumps
als UTF8 und wandelt dabei ganz transparent beliebige Encodings der
Datenbankinhalte in UTF8 um (deswegen UTF8: alle anderen Encodings
sind verlustfrei nach UTF8 konvertierbar). Und ebenso ganz transparent
wird das UTF8 beim Einlesen des Dumps wieder in das gewünschte Encoding
zurück konvertiert.


XL

Re: dump von einem encoding im anderen importieren

am 23.11.2006 00:17:45 von official

& dixit Axel Schwenke:
>> Nun soll diese Datenbank auf einen anderen Rechner überführt werden. Also
>> mysqldump, das File per scp übertragen, in MySQL eingelesen.
>>
>
> *Wer* hat das Dumpfile umgewandelt? Und vor allem *warum*?

Ich, weil ohne Umwandlung nicht das rausgekommen ist, was ich wollte. Also
hab ichs dort probiert.

Aber wenn ich dich mit

> Seit einer frühen 4.1 Version schreibt mysqldump prinzipiell alle Dumps
> als UTF8 und wandelt dabei ganz transparent beliebige Encodings der
> Datenbankinhalte in UTF8 um (deswegen UTF8: alle anderen Encodings
> sind verlustfrei nach UTF8 konvertierbar). Und ebenso ganz transparent
> wird das UTF8 beim Einlesen des Dumps wieder in das gewünschte Encoding
> zurück konvertiert.

richtig verstanden habe, sind in den entsprechenden Tabellen die Daten brav
als latin1 enthalten. Wenn es so wäre, wäre mein Problem irgendwo im CMS
(der apache tut brav, was man ihm sagt).

Wie kann ich kontrollieren, ob die Umlaute in einer Tabelle tatsächlich im
passenden Encoding vorliegen?

mfg
Christian

Re: dump von einem encoding im anderen importieren

am 23.11.2006 14:09:03 von Axel Schwenke

"Christian H. Kuhn" wrote:
> & dixit Axel Schwenke:
>>
>> *Wer* hat das Dumpfile umgewandelt? Und vor allem *warum*?
>
> Ich, weil ohne Umwandlung nicht das rausgekommen ist, was ich wollte. Also
> hab ichs dort probiert.
>
> Aber wenn ich dich mit
>
>> Seit einer frühen 4.1 Version schreibt mysqldump prinzipiell alle Dumps
>> als UTF8 und wandelt dabei ganz transparent beliebige Encodings der
>> Datenbankinhalte in UTF8 um (deswegen UTF8: alle anderen Encodings
>> sind verlustfrei nach UTF8 konvertierbar). Und ebenso ganz transparent
>> wird das UTF8 beim Einlesen des Dumps wieder in das gewünschte Encoding
>> zurück konvertiert.

noch eine Anmerkung: das funktioniert so reibungslos natürlich nur,
wenn beide MySQLs Version 4.1 oder größer sind und auch das mysqldump
dazu paßt.

> Wie kann ich kontrollieren, ob die Umlaute in einer Tabelle tatsächlich im
> passenden Encoding vorliegen?

Du könntest HEX() verwenden. Kris hat da auch schon drüber gebloggt:
http://blog.koehntopp.de/archives/1424-MySQL-Zeichensatz-Gru ndlagen.html


XL

Re: dump von einem encoding im anderen importieren

am 26.11.2006 15:57:42 von official

& dixit Axel Schwenke:

>> Wie kann ich kontrollieren, ob die Umlaute in einer Tabelle tatsächlich
>> im passenden Encoding vorliegen?
>
> Du könntest HEX() verwenden. Kris hat da auch schon drüber gebloggt:
> http://blog.koehntopp.de/archives/1424-MySQL-Zeichensatz-Gru ndlagen.html

Danke, so konnte ich herausfinden, dass das Problem nicht bei MySQL lag.

mfg
Christian