Schüssel: MySQL DB in UTF 8 umwandeln. Worauf achten?

Moin,

Ich möchte meine MySQL Datenbank auf UTF 8 umstellen. Ich benutze phpmyadmin. Soweit ich das verstanden habe, wähle ich die Datenbank, gehe auf "Operations" und wähle dort unter "Collation" UTF 8. Stimmt das soweit?
Jedenfalls bin ich nicht sicher welches utf8 ich wählen soll. Für mich klingen "utf8_bin", "utf8_general_ci" und "utf8_unicode_ci" alle recht plausibel, wobei ich zu letzterem tendieren würde. Wo ist bei den 3 der Unterschied. Wo ist überhaupt der Unterschied zwischen den ganzen "ut8_<sprache>_ci" Auswahlmöglichkeiten?

Nun gut, wenn ich das mal gemacht habe, codiert MySQL die bereits vorhandenen Datensätze auch auf UTF8 um? Oder ruiniere ich mir da die Datenbank?

Vielen vielen Dank für euer Hilfe, ich weiß momentan wirklich nicht weiter.

  1. echo $begrüßung;

    Ich möchte meine MySQL Datenbank auf UTF 8 umstellen. Ich benutze phpmyadmin. Soweit ich das verstanden habe, wähle ich die Datenbank, gehe auf "Operations" und wähle dort unter "Collation" UTF 8. Stimmt das soweit?

    Das stimmt, ist aber noch nicht alles. Weiter gehts mit den einzelnen Tabellen auf die gleiche Art wie bei der Datenbank. Und dann kommen noch die Text enthaltenden Felder der einzelnen Tabellen an die Reihe. Die erkennst du in der Struktur-Übersicht an einem Eintrag in der Spalte Kollation.

    Jedenfalls bin ich nicht sicher welches utf8 ich wählen soll. Für mich klingen "utf8_bin", "utf8_general_ci" und "utf8_unicode_ci" alle recht plausibel, wobei ich zu letzterem tendieren würde. Wo ist bei den 3 der Unterschied. Wo ist überhaupt der Unterschied zwischen den ganzen "ut8_<sprache>_ci" Auswahlmöglichkeiten?

    "bin" ist nicht das was du möchtest. <sprache> ist der Teil, der sich Kollation nennt und für die richtige Reihenfolge bei der Sortierung sorgt. Der Unterschied zwischen "unicode" und "general" ist im Handbuch-Kapitel Unicode Character Sets erklärt.

    Nun gut, wenn ich das mal gemacht habe, codiert MySQL die bereits vorhandenen Datensätze auch auf UTF8 um?

    Ja.

    Oder ruiniere ich mir da die Datenbank?

    Wenn die bisherige Kodierung der Daten zur Angabe in den Feldern gestimmt hat, dann nicht.

    Beachte weiterhin, dass die Clients nach dem Verbindungsaufbau dem Server mitteilen sollten, welche Kodierung auf der Verbindung genommen werden soll. Dafür reicht im Allgemeinen ein "SET NAMES ...". Siehe Kapitel Connection Character Sets and Collations.

    echo "$verabschiedung $name";

    1. Hey danke, hat alles super geklappt. Ging alles in allem viel leichter und reibungsloser als ich dachte.

      Sollte ich jetzt noch alle Dateien (php, htm, css,...) als UTF-8 abspeichern, oder ist das nicht mehr notwendig?

      1. echo $begrüßung;

        Sollte ich jetzt noch alle Dateien (php, htm, css,...) als UTF-8 abspeichern, oder ist das nicht mehr notwendig?

        Das halte ich für angebracht. Es nützt ja nicht viel, in der Datenbank UTF-8 speichern zu können wenn die Ausgabe nur mit 256 Zeichen umgehen kann.

        echo "$verabschiedung $name";