mysql update - umlaute weg?

mysql update - umlaute weg?

am 31.10.2005 19:19:03 von Martin Klaffenboeck

Hallo!

Ich habe mysql von 4.0.25 nach 4.1.14 upgedatet. Zuvor habe ich ein dump
(mysqldump) erstellt, welches ich nachher wieder einspielen wollte.

Jetzt sind alle Umlaute weg. Im SQL File sind sie aber noch korrekt. Nun
habe ich versucht das sql file als utf8 zu speichern. Anstatt der Umlaute
werden nun sonderzeichen angezeigt, als iso-8859-1 oder iso-8859-15
scheinen die Einträge direkt vor dem ersten Umlaut einfach abgeschnitten
zu werden.

Wie kann ich denn da jetzt vorgehen um die Umlaute wieder zu bekommen?

Dankeschön,
Martin

Re: mysql update - umlaute weg?

am 31.10.2005 20:34:17 von Christian Kirsch

Martin Klaffenboeck wrote:
> Hallo!
>
> Ich habe mysql von 4.0.25 nach 4.1.14 upgedatet. Zuvor habe ich ein
> dump (mysqldump) erstellt, welches ich nachher wieder einspielen
> wollte.
>
> Jetzt sind alle Umlaute weg. Im SQL File sind sie aber noch korrekt.

> Nun

Bitte versuch' mal, das in anderen Kategorien als "weg" und "korrekt" zu
beschreiben. Vor allem so, dass man es auch verstehen kann. Ich
interpretiere mal:

- Du hast einen mysqldump in (bspw.) db.sql erzeugt
- Wenn Du da mit vi/emacs oder auch more reinguckst, dann sehen die
Umlaute so aus, wie Du es erwartest
- Du arbeitest in einer Latin-1-Umgebung
- Jetzt hast Du die Daten mit
mysql < db.sql
in Version 4.1.14 eingelesen
- und wenn Du nun ein
mysql -e 'select name from bla'
ausführst, erscheinen keine Umlaute.

Stimmt das soweit?

Dann möchtest Du in der Dokumentation das Kapitel 10 zum Thema "charset
and collation" nachlesen.

> habe ich versucht das sql file als utf8 zu speichern. Anstatt der
> Umlaute werden nun sonderzeichen angezeigt,

Umlaute *sind* Sonderzeichen. Meinst Du: Für jeden Umlaut sehe ich jetzt
zwei Zeichen, das erste davon ist meistens ein A mit irgendeinem
diakritischen Zeichen drüber?

Das ist *normal*. UTF-8 braucht eben für Umlaute zwei Zeichen.

> als iso-8859-1 oder iso-8859-15
> scheinen die Einträge direkt vor dem ersten Umlaut einfach
> abgeschnitten zu werden.
>
Diesen Satz verstehe ich nicht.

> Wie kann ich denn da jetzt vorgehen um die Umlaute wieder zu bekommen?
>

Mach den Dump mit Latin-1. Und stell' default-charset/default-collation
auf latin1 bzw. latin1_german1_ci, *bevor* Du die Daten in die neue
MySQL-Version importierst.

Lies die Dokumentation dazu. Google ein wenig - das ist ja hier nicht
zum ersten Mal Thema.

Re: mysql update - umlaute weg?

am 31.10.2005 21:01:48 von Martin Klaffenboeck

Am Mon, 31 Oct 2005 20:34:17 +0100 schrieb Christian Kirsch:

> Martin Klaffenboeck wrote:
>> Hallo!
>>
>> Ich habe mysql von 4.0.25 nach 4.1.14 upgedatet. Zuvor habe ich ein
>> dump (mysqldump) erstellt, welches ich nachher wieder einspielen
>> wollte.
>>
>> Jetzt sind alle Umlaute weg. Im SQL File sind sie aber noch korrekt.
>
>> Nun
>
> Bitte versuch' mal, das in anderen Kategorien als "weg" und "korrekt" zu
> beschreiben. Vor allem so, dass man es auch verstehen kann. Ich
> interpretiere mal:
>
> - Du hast einen mysqldump in (bspw.) db.sql erzeugt
> - Wenn Du da mit vi/emacs oder auch more reinguckst, dann sehen die
> Umlaute so aus, wie Du es erwartest
> - Du arbeitest in einer Latin-1-Umgebung
> - Jetzt hast Du die Daten mit
> mysql < db.sql
> in Version 4.1.14 eingelesen
>
> Stimmt das soweit?

Soweit ca. richtig. Ich habe allerdings festgestellt, dass das irgenwdie
eine applikationsproblem sein muss. wenn ich den charset nach utf8
wandle, scheint mysql richtig zu arbeiten. Zumindest mysql-query-browser
zeigt die Umlaute richtig an.

> Dann möchtest Du in der Dokumentation das Kapitel 10 zum Thema "charset
> and collation" nachlesen.

Werde ich machen, dankeschön.

>> habe ich versucht das sql file als utf8 zu speichern. Anstatt der
>> Umlaute werden nun sonderzeichen angezeigt,
>
> Umlaute *sind* Sonderzeichen.

Ok, das ist Ansichtssache. In manchen Zeichensätzen sind es
Sonderzeichen, in anderen nicht.

> Meinst Du: Für jeden Umlaut sehe ich
> jetzt zwei Zeichen, das erste davon ist meistens ein A mit irgendeinem
> diakritischen Zeichen drüber?
>
> Das ist *normal*. UTF-8 braucht eben für Umlaute zwei Zeichen.

Das weißt ich natürlich, ich habe selber schon genug utf-8 in C
Erfahrungen.

Mein Problem ist: Wie biege ich jetzt mysql so hin, dass die utf-8
gespeicherten Datensätze als latin1 ausgegeben werden. Mir scheint, dass
latin1 und iso-8859-1 ident sind.

>> als iso-8859-1 oder iso-8859-15
>> scheinen die Einträge direkt vor dem ersten Umlaut einfach
>> abgeschnitten zu werden.
>>
> Diesen Satz verstehe ich nicht.

Ist jetzt irrelevant, hieß soviel wie: Wenn ich mein sql file im latin1
charset speichere wird beim mysql < file.sql jeder string nur bis zum
ersten umlaut gespeichert, der rest wird einfach ignoriert. Aber das habe
ich jetzt ja schon gelöst.

>> Wie kann ich denn da jetzt vorgehen um die Umlaute wieder zu bekommen?
>>
>>
> Mach den Dump mit Latin-1. Und stell' default-charset/default-collation
> auf latin1 bzw. latin1_german1_ci, *bevor* Du die Daten in die neue
> MySQL-Version importierst.

Mal sehen was das genau bedeutet. Wenn das dazu führt, dass ich dann nur
latin1 tabellen habe, dann ist das schon ok. Letztlich würde auch eine
Lösung reichen in der ich mysql mitteile: Wenn in tabelle XY ein SELECT
gemacht wird, dann sollen die daten nicht als utf8 sondern als latin1
zurückgegeben werden.

lg,
Martin

Re: mysql update - umlaute weg?

am 01.11.2005 10:20:45 von Christian Kirsch

Martin Klaffenboeck wrote:
> Am Mon, 31 Oct 2005 20:34:17 +0100 schrieb Christian Kirsch:
>
>>Bitte versuch' mal, das in anderen Kategorien als "weg" und "korrekt" zu
>>beschreiben. Vor allem so, dass man es auch verstehen kann. Ich
>>interpretiere mal:
>>
>>- Du hast einen mysqldump in (bspw.) db.sql erzeugt
>>- Wenn Du da mit vi/emacs oder auch more reinguckst, dann sehen die
>>Umlaute so aus, wie Du es erwartest
>>- Du arbeitest in einer Latin-1-Umgebung
>>- Jetzt hast Du die Daten mit
>> mysql < db.sql
>> in Version 4.1.14 eingelesen
>>
>>Stimmt das soweit?
>
>
> Soweit ca. richtig. Ich habe allerdings festgestellt, dass das irgenwdie
> eine applikationsproblem sein muss. wenn ich den charset nach utf8
> wandle, scheint mysql richtig zu arbeiten. Zumindest mysql-query-browser
> zeigt die Umlaute richtig an.
>
>
Ich finde Deine Beschreibung nach wie vor unklar (und wg. des
Verzichts auf Großbuchstaben auch schlechter lesbar als nötig).

Was MEINST Du mit "Wenn ich den charset nach UTF-8 wandle"? Womit?
Wann? Wie?

>
>>Meinst Du: Für jeden Umlaut sehe ich
>>jetzt zwei Zeichen, das erste davon ist meistens ein A mit irgendeinem
>>diakritischen Zeichen drüber?
>>
>>Das ist *normal*. UTF-8 braucht eben für Umlaute zwei Zeichen.
>
>
> Das weißt ich natürlich, ich habe selber schon genug utf-8 in C
> Erfahrungen.
>

So natürlich fand ich das nach der bisherigen Beschreibung nicht.

> Mein Problem ist: Wie biege ich jetzt mysql so hin, dass die utf-8
> gespeicherten Datensätze als latin1 ausgegeben werden. Mir scheint, dass
> latin1 und iso-8859-1 ident sind.
>
Was jetzt? Beschreib doch mal ALLES, KOMPLETT, VERSTÄNDLICH. Das kann
doch nicht so schwierig sein. Was ist die Ausgangssituation
(MySQL-Version, Codierung der Datensätze)? Wo willst Du hin, maW: Was
ist das Ziel (MySQL-Version, Codierung der Datensätze)? Was hast Du
genau (GENAU! ohne Prosa, ohne irgendwies etc.) getan? Was ist das
Ergebnis (ohne Prosa, ohne irgendwies etc.: Was *siehst* Du in welchem
Programm, wenn Du was eingibst)?

Ach ja: Latin1 und iso-8859-1 *sind* identisch. Vielleicht möchtest Du
aber auch Latin9/iso-8859-15 benutzen, wenn Du das ¤-Zeichen brauchst.


>
>>>als iso-8859-1 oder iso-8859-15
>>>scheinen die Einträge direkt vor dem ersten Umlaut einfach
>>>abgeschnitten zu werden.
>>>
>>
>>Diesen Satz verstehe ich nicht.
>
>
> Ist jetzt irrelevant, hieß soviel wie: Wenn ich mein sql file im latin1
> charset speichere wird beim mysql < file.sql jeder string nur bis zum
> ersten umlaut gespeichert, der rest wird einfach ignoriert.

Hoffentlich nicht. Wäre es so, gäbe es eine Fehlermeldung. Ich
vermute, Du *interpretierst* hier (oder hast Du mit einem Debugger
nachgeguckt, was MySQL *speichert*). Vermutlich zeigt Dir ein "SELECT"
die Daten nur bis zum Umlaut. Was z.B. an Deinem Terminal liegen kann,
an Deinem Zeichensatz, an Deiner Verbindung - whatever.

> Aber das habe
> ich jetzt ja schon gelöst.
>
Schön. Und wie?

>
>>>Wie kann ich denn da jetzt vorgehen um die Umlaute wieder zu bekommen?
>>>
>>>
>>
>>Mach den Dump mit Latin-1. Und stell' default-charset/default-collation
>>auf latin1 bzw. latin1_german1_ci, *bevor* Du die Daten in die neue
>>MySQL-Version importierst.
>
>
> Mal sehen was das genau bedeutet. Wenn das dazu führt, dass ich dann nur
> latin1 tabellen habe, dann ist das schon ok.

Wenn Du das nicht willst, dann stell halt
default-charset/default-collation auf utf8/latin1_german1_ci. Da Du
Dich mutwillig unklar ausdrückst, kann man nur raten, was Du brauchst.

> Letztlich würde auch eine
> Lösung reichen in der ich mysql mitteile: Wenn in tabelle XY ein SELECT
> gemacht wird, dann sollen die daten nicht als utf8 sondern als latin1
> zurückgegeben werden.

LIES DIE DOKUMENTATION. Man kann Charset/Collation pro Datenbank,
Tabelle und sogar Spalte einstellen.

Re: mysql update - umlaute weg?

am 01.11.2005 12:45:14 von Martin Klaffenboeck

Am Tue, 01 Nov 2005 10:20:45 +0100 schrieb Christian Kirsch:

>> Soweit ca. richtig. Ich habe allerdings festgestellt, dass das irgenwdie
>> eine applikationsproblem sein muss. wenn ich den charset nach utf8
>> wandle, scheint mysql richtig zu arbeiten. Zumindest mysql-query-browser
>> zeigt die Umlaute richtig an.
>>
>>
> Ich finde Deine Beschreibung nach wie vor unklar (und wg. des
> Verzichts auf Großbuchstaben auch schlechter lesbar als nötig).
>
> Was MEINST Du mit "Wenn ich den charset nach UTF-8 wandle"? Womit?
> Wann? Wie?

Der Umwandeln der Datei bevor ich es erneut mit mysql < file.sql lade.
(Ja, es sind drop tables drinnen).

> Hoffentlich nicht. Wäre es so, gäbe es eine Fehlermeldung. Ich
> vermute, Du *interpretierst* hier (oder hast Du mit einem Debugger
> nachgeguckt, was MySQL *speichert*). Vermutlich zeigt Dir ein "SELECT"
> die Daten nur bis zum Umlaut. Was z.B. an Deinem Terminal liegen kann,
> an Deinem Zeichensatz, an Deiner Verbindung - whatever.

Das kann natürlich auch sein. Ich sehe nur die Zeichen vor dem ersten
Umalaut, wenn ich eine Ausgabe mittels php auf dem browser mache oder
mittels mysql-query-browser eine Tabelle anzeigen lasse (SELECT * FROM xy)

>> Aber das habe
>> ich jetzt ja schon gelöst.
>>
> Schön. Und wie?

Ich habe die sql Datei nach utf-8 gewandelt und danach importiert,
mittels mysql < file.sql

lg,
Martin,
der sich jetzt mal in die Docu vertieft.

Re: mysql update - umlaute weg?

am 04.11.2005 11:57:43 von Henri Schomaecker

Martin Klaffenboeck wrote:

> Hallo!
> ...
>
> Wie kann ich denn da jetzt vorgehen um die Umlaute wieder zu bekommen?
>
> Dankeschön,
> Martin

Unter dem Thread "Codepageproblem" beschreibe ich die Lösung Schritt für
Schritt.

Gruss Henri