Einleitung: Warum die Wahl der MySQL Collation kein ästhetisches Detail ist
\nJeder, der schon einmal eine Datenbank für ein PHP-Projekt eingerichtet hat, stand vor der Frage: „Welche Collation (Vergleich/Sortierung) soll ich wählen?“. Auf Stack Overflow wurde diese Frage tausendfach angesehen, und die Antworten verwirren Einsteiger oft. Auf den ersten Blick scheint es keinen Unterschied zu machen – Hauptsache, es funktioniert. Doch die Wahl der Collation beeinflusst die Suchgeschwindigkeit, die korrekte Sortierung (besonders mit der deutschen Sprache) und sogar die Darstellung von Sonderzeichen.
\nIn diesem Tutorial klären wir, welche Collation für MySQL mit PHP im Jahr 2025 wirklich die beste ist und warum. Sie erfahren, wie Sie klassische Fehler vermeiden und Ihre Datenbank so einrichten, dass Ihre Website fliegt und Ihre Daten nicht zu Zeichensalat werden.
\n\nWas ist eine Collation einfach erklärt?
\nEine Collation (Vergleichsregel) ist eine Reihe von Regeln, nach denen MySQL Zeichenketten vergleicht und sortiert. Sie ist eng mit dem Zeichensatz (Charset) verbunden. Während der Zeichensatz (z. B. utf8mb4) bestimmt, wie Zeichen gespeichert werden, legt die Collation fest, wie sie verglichen werden: ob die Groß-/Kleinschreibung beachtet wird, wie die Buchstaben „ö“ und „oe“ sortiert werden und ob „A“ und „a“ als gleich gelten.
Die wichtigsten Collation-Typen für utf8mb4:
- \n
- utf8mb4_general_ci – alt, schnell, aber mit vereinfachter Sortierung (verarbeitet einige Sprachen nicht immer korrekt). \n
- utf8mb4_unicode_ci – genauer, basierend auf dem Unicode-Standard, aber vor MySQL 8.0 langsamer. \n
- utf8mb4_0900_ai_ci – die neueste (MySQL 8.0+), gleichzeitig die genaueste und schnellste. \n
Warum Sie alte Collations vermeiden sollten
\nViele Legacy-Projekte arbeiten noch mit utf8_general_ci oder sogar latin1_swedish_ci. Wenn Sie ein neues PHP-Projekt schreiben, meiden Sie diese wie die Pest. Hier ist der Grund:
- \n
- Probleme mit der deutschen Sprache: „ö“ und „oe“ können falsch sortiert werden. \n
- Eingeschränkter Zeichensatz: Alte Kodierungen unterstützen keine Emojis und seltene Zeichen. \n
- Leistung: Moderne Collations sind optimiert und arbeiten schneller. \n
Die beste Collation im Jahr 2025: utf8mb4_0900_ai_ci
\nWenn Ihr MySQL Version 8.0 oder höher ist (was bei den meisten der Fall ist), dann ist die beste Wahl utf8mb4_0900_ai_ci. Die Abkürzung erklärt:
\n- \n
- utf8mb4 – Zeichensatz, der 4 Bytes pro Zeichen unterstützt (Emojis, seltene Hieroglyphen). \n
- 0900 – basiert auf dem Unicode-Standard 9.0 (aktuellste Version). \n
- ai – accent insensitive (unempfindlich gegenüber Akzenten: „café“ und „cafe“ sind gleich). \n
- ci – case insensitive (Groß-/Kleinschreibung wird ignoriert: „Hallo“ und „hallo“ sind gleich). \n
Diese Collation bietet maximale Genauigkeit und Geschwindigkeit. Wenn Sie Groß-/Kleinschreibung oder Akzente unterscheiden müssen, verwenden Sie utf8mb4_0900_as_cs, aber für 99% der Webprojekte ist ai_ci die ideale Wahl.
Was, wenn ich MySQL 5.7 oder niedriger habe?
\nDann ist Ihre Wahl utf8mb4_unicode_520_ci (oder einfach utf8mb4_unicode_ci). Sie ist nicht so schnell wie die 0900-Variante, aber viel genauer als general_ci. Wenn Sie eine alte Version haben – aktualisieren Sie sie dringend, aber solange Sie damit leben, verwenden Sie utf8mb4_unicode_ci.
Schritt-für-Schritt-Tutorial: Collation im PHP-Projekt einrichten
\nLassen Sie uns die Datenbank richtig konfigurieren. Ich zeige es Ihnen am Beispiel von PDO – der modernen und sicheren Methode für die Arbeit mit MySQL in PHP.
\n\nSchritt 1: Datenbank mit der richtigen Collation erstellen
\nFühren Sie diese SQL-Abfrage aus (über phpMyAdmin oder die Konsole):
\nCREATE DATABASE my_database\n CHARACTER SET utf8mb4\n COLLATE utf8mb4_0900_ai_ci;\n\nSchritt 2: PHP-Verbindung konfigurieren (PDO)
\nGeben Sie bei der Verbindung zur Datenbank unbedingt den Zeichensatz an. So stellen Sie sicher, dass alle Daten korrekt übertragen werden:
<?php\n\$dsn = 'mysql:host=localhost;dbname=my_database;charset=utf8mb4';\n\$pdo = new PDO(\$dsn, 'benutzername', 'passwort', [\n PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,\n PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,\n]);\n?>
Mit dieser Einstellung sind Sie auf der sicheren Seite – Ihre Datenbank wird korrekt sortieren, schnell suchen und alle modernen Zeichen unterstützen.