Verständnisfrage zu Kollationen

Verständnisfrage zu Kollationen

am 20.12.2005 14:51:47 von newsmail

Hallo,

es wird wohl dringend Zeit, mich mal mit Kollationen und Zeichensätzen
auseinanderzusetzen. Es kommt immer wieder vor, dass ich eine ältere
MySQL-Datenbank auf einen neuen Server exportiere und an Stelle der Umlaute
nur noch Fragezeichen habe.

Man kann ja in PhpMyAdmin an viele Stellen den Zeichensatz/Kollation
einstellen: für die MySQL-Verbindung, für die Datenbanktabellen und für
einzelne Datenfelder. Wo muss was eingestellt sein? Was ist die "richtige"
Einstellung für deutsche Texte? Wann muss ich beim Ex-/Importieren den
Zeichensatz einstellen, damit ich nicht wieder die Fragezeichen bekomme? Und
ist noch was zu retten, wenn die Fragezeichen da sind, oder muss ich die
Tabellen nochmal neu importieren?

Frage über Fragen. Ich hoffe, mir kann jemand helfen, Licht ins Dunkel zu
bringen.

Schönen Gruß
Jörg

Re: Verständnisfrage zu Kollationen

am 20.12.2005 15:21:42 von Axel Schwenke

"Jörg Driesner" wrote:
>
> es wird wohl dringend Zeit, mich mal mit Kollationen und Zeichensätzen
> auseinanderzusetzen.

Ja.

[snip]

Zu welchem Teil von Kapitel 10 des Handbuchs hast du denn nun
konkrete Fragen?

Re: Verständnisfrage zu Kollationen

am 20.12.2005 16:21:15 von newsmail

Axel Schwenke wrote:
> Zu welchem Teil von Kapitel 10 des Handbuchs hast du denn nun
> konkrete Fragen?

Danke für den Tipp, aber...
Kapitel 10. MySQL erweitern???

Vielleicht habe ich das falsche Manual. Wo finde ich denn etwas über
Kollationen und Zeichensätze?

Re: Verständnisfrage zu Kollationen

am 20.12.2005 16:24:49 von newsmail

Axel Schwenke wrote:
> Zu welchem Teil von Kapitel 10 des Handbuchs hast du denn nun
> konkrete Fragen?

Tatsächlich das falsche Manual. Ich hätte bei 5.0 nachsehen sollen. Gibt es
das irgendwo in deutsch?

Re: Verständnisfrage zu Kollationen

am 20.12.2005 16:39:56 von Dirk Brosowski

Jörg Driesner schrieb:
> Axel Schwenke wrote:
>
>>Zu welchem Teil von Kapitel 10 des Handbuchs hast du denn nun
>>konkrete Fragen?
>
>
> Tatsächlich das falsche Manual. Ich hätte bei 5.0 nachsehen sollen. Gibt es
> das irgendwo in deutsch?
>
>
wahrscheinlich nicht, die Doku hinkt immer sehr weit zurück.

Grüße

Dirk

Re: Verständnisfrage zu Kollationen

am 20.12.2005 18:46:49 von newsmail

Axel Schwenke wrote:
> Zu welchem Teil von Kapitel 10 des Handbuchs hast du denn nun
> konkrete Fragen?

Ok. Ich habe Kapitel 10 gefunden und studiert. ;-)

Ich habe eine MySQL-Datenbank bei 1&1. Deren PhpMyAdmin zeigt mir keine
Kollationen und keine Zeichensätze. Ich sehe noch nicht mal, welche
MySQL-Version ich vor mir habe. In der SQL-Exportdatei steht allerdings
Server-Version 4.0.25 - Aha!

Was muss ich nun beim neuen Server einstellen, damit ich keine Fragezeichen
an Stelle der Umlaute bekomme?

Kann ich das auch nach dem Import noch ändern?

Re: Verständnisfrage zu Kollationen

am 21.12.2005 09:25:53 von Christian Kirsch

Jörg Driesner schrieb:
> Axel Schwenke wrote:
>
>>Zu welchem Teil von Kapitel 10 des Handbuchs hast du denn nun
>>konkrete Fragen?
>
>
> Ok. Ich habe Kapitel 10 gefunden und studiert. ;-)
>
> Ich habe eine MySQL-Datenbank bei 1&1. Deren PhpMyAdmin zeigt mir keine
> Kollationen und keine Zeichensätze. Ich sehe noch nicht mal, welche
> MySQL-Version ich vor mir habe. In der SQL-Exportdatei steht allerdings
> Server-Version 4.0.25 - Aha!
>
> Was muss ich nun beim neuen Server einstellen, damit ich keine Fragezeichen
> an Stelle der Umlaute bekomme?
>

So kann man diese Frage nicht beantworten - man müsste wissen, was wo
eingestellt ist und wo Du Fragezeichen siehst. Allgemein gilt: Der
Zeichensatz in der Datenbank muss zu dem Zeichensatz bzw. den
Zeichensätzen in der Software passen, die Du zur Ausgabe benutzt
(Webserver+-browser, Terminal, whatever). Wer UTF-8 in der DB
speichert und dann versucht, sich das mit Latin1-Fonts (z.B.)
anzugucken, hat Trauer.

> Kann ich das auch nach dem Import noch ändern?

Ja. Allerdings vermutlich nicht mit phpMyAdmin, wenn es diese Optionen
nicht anbietet.

Übrigens hat Deine Frage *nichts* mit Kollationen zu tun, sondern nur
mit Character Sets (Zeichensätzen).

Re: Verständnisfrage zu Kollationen

am 21.12.2005 10:41:34 von Axel Schwenke

"Jörg Driesner" wrote:
> Axel Schwenke wrote:
>> Zu welchem Teil von Kapitel 10 des Handbuchs hast du denn nun
>> konkrete Fragen?
>
> Ok. Ich habe Kapitel 10 gefunden und studiert. ;-)
>
> Ich habe eine MySQL-Datenbank bei 1&1.
> Ich sehe noch nicht mal, welche MySQL-Version ich vor mir habe.

Dann such die Seite in phpMyAdmin, wo du eine eigene SQL-Query absetzen
kannst und verwende SELECT VERSION()

> In der SQL-Exportdatei

Was ist das? Ein (my)SQL-Dump wohl nicht. Hat das phpMyAdmin erzeugt?
Mit welcher Einstellung für die Zeichencodierung?

Meine Empfehlung: als UTF-8 exportieren.

> Was muss ich nun beim neuen Server einstellen, damit ich keine Fragezeichen
> an Stelle der Umlaute bekomme?

Welche Applikation zeigt dir denn Fragezeichen? Verwendet diese
Applikation korrekte Einstellungen für character_set_* ? Und welche
Zeichencodierung erwartet dein Ausgabegerät?

> Kann ich das auch nach dem Import noch ändern?

Du solltest dir *vor* dem Import überlegen, welche Zeichencodierung du
für welche Datenbank/Tabelle/Spalte verwenden willst. Dann nimmst du
den Editor deiner Wahl und änderst die Tabellendefinitionen in deinem
SQL-Dump entsprechend. Anschließend importierst du den Dump. Wenn die
Strings als UTF-8 gespeichert sind und am Anfang des Dumps ein 'SET
NAMES utf8' steht, werden alles Strings richtig konvertiert.

Zumindest mit einem von 'mysqldump' erzeugten Dump würde das funktio-
nieren. K.A. was phpMyAdmin macht.


XL

Re: Verständnisfrage zu Kollationen

am 21.12.2005 11:27:28 von newsmail

Axel Schwenke wrote:
>> In der SQL-Exportdatei
>
> Was ist das? Ein (my)SQL-Dump wohl nicht. Hat das phpMyAdmin erzeugt?

Ja. Ein von phpMyAdmin erzeugter SQL-Dump.

> Mit welcher Einstellung für die Zeichencodierung?

Keine. Ist nicht vorgesehen. Die phpMyAdmin-Version scheint ziemlich
gestutzt zu sein. Jedenfalls bekomme ich auch nicht die normale Startseite
zu sehen, wenn ich auf das Home-Symbol von phpMyAdmin klicke, sondern nur
Language und den Export-Link.

> Welche Applikation zeigt dir denn Fragezeichen? Verwendet diese
> Applikation korrekte Einstellungen für character_set_* ? Und welche
> Zeichencodierung erwartet dein Ausgabegerät?

Das phpMyAdmin auf dem neuen Server, allerdings eine vollständige Version.
Korrekte Einstellungen? Das war eigentlich meine Frage: Was sind die
korrekten Einstellungen? Was ist mit Ausgabegerät gemeint? Der Browser?

> Wenn die Strings als UTF-8 gespeichert sind und am Anfang des Dumps ein
> 'SET
> NAMES utf8' steht, werden alles Strings richtig konvertiert.

Ich werde das mal ausprobieren. Vielen Dank!

Re: Verständnisfrage zu Kollationen

am 21.12.2005 12:43:47 von Axel Schwenke

"Jörg Driesner" wrote:
> Axel Schwenke wrote:
>
>> Mit welcher Einstellung für die Zeichencodierung?
>
> Keine. Ist nicht vorgesehen.

Das ist schlecht. Hoffentlich weißt *du* wenigstens, mit welchem
Encoding deine Daten in der Datenbank stehen.

>> Welche Applikation zeigt dir denn Fragezeichen? Verwendet diese
>> Applikation korrekte Einstellungen für character_set_* ? Und welche
>> Zeichencodierung erwartet dein Ausgabegerät?
>
> Das phpMyAdmin auf dem neuen Server, allerdings eine vollständige Version.
> Was ist mit Ausgabegerät gemeint? Der Browser?

Ja, wenn es über HTML geht, ist der Browser gemeint. Und verglichen mit
den meisten anderen Möglichkeiten ist HTML eigentlich ganz gut, weil
man da das Encoding der übertragenen Daten wenigstens spezifizieren
*kann* (im 'content-type' HTTP-Header).

> Korrekte Einstellungen? Das war eigentlich meine Frage: Was sind die
> korrekten Einstellungen?

Kommt drauf an, was man erreichen will.

Folgendes Szenario: wir haben eine Datenbank, in der steht Text mit
Encoding latin2. Unsere PHP-Applikation soll UTF-8 ausgeben.

In pre-MySQL-4.1 würde man die Daten aus der Datenbank auslesen und
sie "händisch" - z.B. per iconv - nach UTF-8 konvertieren. Da so alte
MySQL-Versionen sich nicht um Encodings kümmern, wissen wir sicher,
daß wir von MySQL auch wirklich latin2 bekommen. Außerdem setzt man
einen geeigneten content-type Header.

Seit MySQL-4.1 hat man mehr Optionen. Im einfachsten Fall würde man
beim Öffnen der Datenbankverbindung den Client-Zeichensatz auf UTF-8
stellen. Dann konvertiert MySQL selber und die Applikation spart sich
das. Alternativ kann man latin2 anfordern und händisch konvertieren.

Jetzt das ganze in "kaputt" (z.B. veraltete phpMyAdmin Version). Beim
Öffnen der Datenbankverbindung wird kein Client-Zeichensatz angegeben.
Also wird der Default - latin1 - verwendet. MySQL konvertiert also von
latin2 nach latin1. Weil es bestimmte Zeichen aus latin2 aber in latin1
nicht gibt, werden diese zu '?' konvertiert -> Kaboom =8-O


Was lernen wir daraus:

1. Als generisches Transport-Encoding (z.B. für Dumps) eignet sich
nur UTF-8. Schließlich ist jedes beliebige Encoding verlustfrei
in UTF-8 konvertierbar. So macht das z.B. mysqldump.

2. Ein SQL-Dump (CSV, Textfile) ist ohne Angabe des verwendeten
Encodings wertlos. Viele Programme verwenden latin1 als Default,
andere Programme "raten" das Encoding, aber zuverlässig ist das
alles nicht.

3. Wenn eine Applikation ein bestimmtes Encoding abliefern soll, ist
es am einfachsten, die Daten von der Datenbank in eben diesem
Encoding anliefern zu lassen. Ersatzweise kann man UTF-8 verwenden
und händisch konvertieren.
Eigentlich spricht heutzutage nichts mehr dagegen, *jede* Web-
applikation UTF-8 sprechen zu lassen.

4. Bei der Analyse von Encoding-Problemen sollte man die Anzahl der
Schichten zwischen Datenbank und Anwender minimieren. Das ist ein
Grund gegen phpMyAdmin. Vor allem gegen alte Versionen.


HTH, XL

Re: Verständnisfrage zu Kollationen

am 21.12.2005 13:56:31 von newsmail

Christian Kirsch wrote:
> Übrigens hat Deine Frage *nichts* mit Kollationen zu tun, sondern nur
> mit Character Sets (Zeichensätzen).

Nach der Lektüre von Kapitel 10 ist mir das auch schon klar geworden. :-)
Allerdings wollte ich deswegen keinen neuen Thread anfangen.

Re: Verständnisfrage zu Kollationen

am 21.12.2005 13:58:51 von newsmail

Danke für die umfangreiche Antwort!

Ich habe eben mal in die Dumpdatei reingeguckt. Da stehen die Fragezeichen
noch nicht. Darum werde ich jetzt mal ein bisschen mit den
Zeichensatzeinstellungen beim Import experimentieren.

Schönen Gruß
Jörg

Re: Verständnisfrage zu Kollationen

am 21.12.2005 14:11:21 von newsmail

Hallo, XL!

Ich musste einfach beim Datei-Import "Latin1" einstellen. Voreinstellung war
"utf8".

Alles wird gut!
Jörg