Webprogrammierungen und Responsive Webdesign

Datenbanken mit Umlauten und Sonderzeichen richtig und fehlerfrei

Flashdance - Sister Act

Probleme mit Umlauten in MySQL-Datenbanken vermeiden bzw. lösen:

MySQL-Datenbanken sind das beliebteste System zur Verwaltung von Daten für Anwendungen im Internet. Besonders häufig werden diese Datenbanken von dem hierzu entwickelten Management-System MariaDB administriert.

In den MySQL-Datenbanken können alle internationalen Zeichen gespeichert und verarbeitet werden. Hierbei gibt es allerdings so manche Tücken. Das zeigt sich auch bei den deutschen Umlauten und Sonderzeichen. Zwar ist in der Regel das Abspeichern und Auslesen ganz easy zu handhaben und funktioniert fehlerfrei. Bei einigen spezifischen Anwendungen können diese Zeichen allerdings zu ungenauen Ausgaben und Fehlern führen.

In diesem Artikel gibt es Tipps, wie man diese Fehler vermeiden bzw. beseitigen kann.

Die richtige Kollation (Collation) für MySQL-Datenbanken mit UTF-8:

Zum Thema Kollationen (englisch bzw. in der Datenbank unter phpMyAdmin = Collation) gibt es viele Artikel im Internet. Deshalb hier nur eine sehr knappe Einführung: Für die deutsche Sprache gibt es zum Beispiel die Kollationen utf8_german2_ci und utf8mb4_german2_ci. Diese sind grundsätzlich erst einmal gut, aber sie können auch zu Einschränkungen führen, falls doch auch andere Sprachen und Zeichen in das Projekt einfließen. Deshalb sollte man die für internationale Sprachen geltende Kollation utf8mb4_unicode_ci (veraltet utf8_unicode_ci und utf8_general_ci) wählen. Das "_ci" steht hier für die Gleichbehandlung von Groß- und Kleinschreibung. Möchte man die Großschreibung von der Kleinschreibung unterscheiden, dann muss man utf8mb4_unicode_cs wählen.

Das "utf8" steht hier für den am häufigsten gebrauchten Zeichensatz UTF-8, mit dem im Unterschied zu den ISO-Zeichensätzen in der Theorie unendlich viele Zeichen dargestellt werden können. Die Entwicklung geht hier kontinuierlich weiter und wird vermutlich nie zu einem Abschluss kommen. Beachtet werden muss allerdings, dass die Kompatibilität der Software immer wieder neu angepasst werden muss (zum Beispiel durch Updates an den Browsern).

Wichtig ist hierbei, dass bei der Verwendung eines UTF-8-Zeichensatzes auch das gesamte Projekt auf UTF-8 aufgebaut sein muss. Das heißt, dass es zu erheblichen Problemen kommt, wenn man zum Beispiel in HTML-Seiten einen ISO-Zeichensatz oder bei der Erstellung der Dateien im Texteditor die ANSI-Kodierung verwendet. Im Dateikopf der HTML-Seiten muss also <meta charset="utf-8" /> stehen und die Kodierung im Textedior auf UTF-8 oder UTF-8-BOM. Das Gleiche gilt für alle weiteren Einstellmöglichkeiten im Projekt.

Deutsche Umlaute und Sonderzeichen in der MySQL-Datenbank:

Wenn das gesamte Projekt auf UTF-8 basiert und die Kollation aller Teile der Datenbank (Datenbank, Tabellen und Spalten) utf8mb4_unicode_ci lautet, sind die Voraussetzungen für die saubere Darstellung aller Umlaute und Sonderzeichen optimal.

Trotzdem kann es immer noch zu Problemen kommen. Die Anweisung "SELECT irgendwas FROM datenbanktabelle WHERE datenbankspalte LIKE 'irgendeininhalt'" kennt nämlich dann immer noch keinen Unterschied zwischen A und Ä, O und Ö usw., obwohl die Kollation utf8mb4_unicode_ci das eigentlich unterscheidet. Hier hilft nur die Kombination mit der REGEXP-Anweisung. REGEXP filtert Teilübereinstimmungen heraus und entspricht damit eigentlich der Eingabe "SELECT irgendwas FROM datenbanktabelle WHERE datenbankspalte LIKE '%irgendeininhalt%'". Aber REGEXP kennt im Unterschied zu LIKE die Unterschiede zwischen A und Ä, O und Ö und so weiter.

Da REGEXP allerdings nur Teilmengen der übereinstimmenden Begriffe herausfiltert, muss diese Anweisung in der Regel noch mit LIKE kombiniert werden.

Beispiel für die Kombination von LIKE und REGEXP:

In diesem Projekt tauchte das Problem bei der Suchfunktion auf. So konnten zum Beispiel die Begriffe Gmünd (Schwäbisch Gmünd) und Gmund (Gmund am Tegernsee) nicht unterschieden werden. Beide Begriffe werden von manchen Seitenbesuchern nur verkürzt abgefragt.

Hier ist die Lösung für die richtige Auswertung und Darstellung von Begriffen mit Umlauten als PHP-Anwendung, nachdem die objektorientierte Verbindung der MySQL-Datenbank über die Variable $mysqli erstellt wurde.

Beachtet werden muss hierbei allerdings, dass REGEXP zwar die Umlaute korrekt erkennt, andere Sonderzeichen hingegen ignoriert. Hierzu gehören zum Beispiel die Klammern. Es empfiehlt sich deshalb, die Abfrage mit $result = $mysqli->query("SELECT linkziel FROM tabelle_begriffe WHERE begriff LIKE '$value' LIMIT 0,1"); noch einmal zu wiederholen.

Webdesign

Deutschlandweit Veranstaltung kostenlos eintragen:





Schuld sind immer die Anderen. Wer das bei welcher Gelegenheit genau ist, kann man hier nachlesen.

Quermania folgen:

Impressum & Kontakt
Auf Quermania werben Smartphone Startseite

Suchen:

Auf einigen Seiten dieses Projektes sind Affiliate-Angebote integriert. Wenn etwas darüber gebucht oder gekauft wird, ist das eine Unterstützung, ohne dass sich dadurch der Preis ändert.