Pierre: Nachhilfe in phpMyAdmin -> Kollation

Hallo

Ich habe eine Frage zu mySQL bzw. phpMyAdmin. Zu Testzwecken habe ich mir CMSmadesimple eingerichtet. Die Software habe ich über das Installationsskript installiert und eigentlich läuft alles prima. Nun wollte ich das ganze auf einen anderen Server zügeln und habe in phpMyAdmin gesehen, dass sämtliche Tabellen auf Kollation: latin1_swedish_ci stehen. Sämtliche Umlaute in den Feldern werden mir in phpMyAdmin nicht mehr angezeigt (ö = ö, etc.) In der Applikation kommt aber alles richtig.

Nun habe ich festgestellt, dass weitere Applikationen die ich eingerichtet habe auch auf Kollation: latin1_swedisch_ci stehen.

Auf der Homepage von phpMyAdmin meiner Datenbank wird folgendes angezeigt:
MySQL-Zeichensatz: UTF-8 Unicode (utf8)
Zeichensatz / Kollation der MySQL-Verbindung:  utf8_genereal_ci

Das tönt doch alles eigentlich ganz ok, nur das swedish-Dingens stört und bei einem export habe ich natürlich alles zerrissene Umlaute in der .sql-Datei. Die Kommentare die phpMyAdmin einfügt sind aber richtig, d.h. hier werden die Umlaute angezeigt.

Nun endlich meine Frage:
Kann mich hier jemand schnell aufklären, wie das ganze funzt und wie ich über phpMyAdmin diese Kollation meiner Tabellen auch auf utf8 stellen kann? Und: Welches dieser unendlich vielen utf8 muss ich denn wählen?
Kann ich via phpMyAdmin etwas umstellen, damit diese Kollation swedish nicht mehr auftaucht sondern alle Tabellen in utf8 sind?

Ich weiss, das sind ne Menge Fragen und ich bin aus dem Archiv hier nicht wirklich schlau geworden, wenn ich nach Kollation gesucht habe. Bitte helft einem mySQL Banausen hier mit ein bisschen KnowHow weiter...

Ganz herzlichen Dank
Pierre

  1. echo $begrüßung;

    Zu Testzwecken habe ich mir CMSmadesimple eingerichtet. Die Software habe ich über das Installationsskript installiert und eigentlich läuft alles prima.

    Entsprechend deiner nachfolgenden Fehlerbeschreibung läuft aber uneigentlich grundsätzlich etwas schief.

    Nun wollte ich das ganze auf einen anderen Server zügeln

    Haben diese beiden MySQL-Server etwa unterschiedliche Versionsstände? Wichtig ist für den Fall nur, ob sie kleiner oder größer als 4.1 sind.

    und habe in phpMyAdmin gesehen, dass sämtliche Tabellen auf Kollation: latin1_swedish_ci stehen. Sämtliche Umlaute in den Feldern werden mir in phpMyAdmin nicht mehr angezeigt (ö = ö, etc.) In der Applikation kommt aber alles richtig.

    Ein kurzer Blick in erwähntes CMS und eine gezielte Suche bringt mir in der Datei include.php die auskommentierte Zeile 114 zu Tage.

    //    $cmsdb->Execute('set names utf8'); // database connection with utf-8

    Diese Zeile, wäre sie aktiv, stellte die Kodierung der Verbindung definiert auf UTF-8. Ohne diese Zeile sendet dein CMS zwar auch UTF-8, aber, so wie es aussieht, steht die Default-Kodierung des MySQL-Servers auf Latin1, weswegen der MySQL-Server Latin1-kodierte Daten erwartet hat. Das ergab nun Zeichensalat in den Anwendungen, die ihre Charset-Hausaufgaben gemacht haben, in dem Fall phpMyAdmin.

    Da es nur ein Test war, schlage ich vor, du löschst die Datenbank wieder, und richtest sie gemäß Schritt 3 der Installationsanleitung noch mal ein, allerdings mit einer kleinen Änderung:

    create database cms CHARACTER SET utf8 COLLATE utf8_general_ci

    Statt utf8_general_ci kannst du auch utf8_unicode_ci nehmen. Die Unterschiede zwischen beiden Varianten sind im MySQL-Handbuch aufgeführt: http://dev.mysql.com/doc/refman/5.0/en/charset-unicode-sets.html

    Nun kannst du erneut das CMS konfigurieren. Die angelegten Tabellen und, was wichtiger ist, die Felder werden nun für die Datenbank vergebene Kodierung und Kollation übernehmen. Somit haben sie die Möglichkeit, alle Unicode-Zeichen zu speichern. Vergiss nicht, vor dem Start der Konfiguration Zeile 114 zu aktivieren. Die sorgt dafür, dass dein MySQL-Server nun weiß, dass UTF-8-kodierte Daten von deiner Applikation zu erwarten sind und dass er solche zurückliefern soll. phpMyAdmin wird daraufhin auch die Umlaute richtig anzeigen können.

    Nun habe ich festgestellt, dass weitere Applikationen die ich eingerichtet habe auch auf Kollation: latin1_swedisch_ci stehen.

    Wenn du keine Kodierung/Kollation angibst, wird der Server-Default-Wert genommen.

    Auf der Homepage von phpMyAdmin meiner Datenbank wird folgendes angezeigt:
    MySQL-Zeichensatz: UTF-8 Unicode (utf8)
    Zeichensatz / Kollation der MySQL-Verbindung:  utf8_genereal_ci

    Diese Angaben sind für deine Applikationen nicht von Belang. Das ist nur für den phpMyAdmin interessant.

    Das tönt doch alles eigentlich ganz ok, nur das swedish-Dingens stört und bei einem export habe ich natürlich alles zerrissene Umlaute in der .sql-Datei. Die Kommentare die phpMyAdmin einfügt sind aber richtig, d.h. hier werden die Umlaute angezeigt.

    UTF-8-kodierte Daten sind grundsätzlich gültige Latin1-Daten, weswegen der MySQL-Server die UTF-8-Bytes klaglos entgegengenommen hat. Allerdings ging er davon aus, dass sie Latin1-kodiert seien. Das Ergebnis hast du ja gesehen.

    Kann mich hier jemand schnell aufklären, wie das ganze funzt und wie ich über phpMyAdmin diese Kollation meiner Tabellen auch auf utf8 stellen kann? Und: Welches dieser unendlich vielen utf8 muss ich denn wählen?
    Kann ich via phpMyAdmin etwas umstellen, damit diese Kollation swedish nicht mehr auftaucht sondern alle Tabellen in utf8 sind?

    Lies dazu bitte das MySQL-Handbuch-Kapitel Character Set Support

    echo "$verabschiedung $name";

    1. Hallo dedlfix

      hoppla. Das ist ja grad ne Doppellektion! Herzlichen Dank. Muss ich erst mal sacken lassen und als Unwissender alles schön Step by Step durcharbeiten.

      Haben diese beiden MySQL-Server etwa unterschiedliche Versionsstände? Wichtig ist für den Fall nur, ob sie kleiner oder größer als 4.1 sind.

      Die DBs werden vom gleichen Provider gehostet, liegen zwar auf verschiedenen Servern, haben aber beide Version 4.1.21 (phpMyAdmin 2.8.2.4 - was wohl nicht ins Gewicht fällt)

      und den ganzen Rest geh ich nun ganz langsam für mich durch ;-)

      Pierre