MySQL Charset Einstellungen via Query herausfinden

Autor: Christian Ahmer, erstellt: 26.08.2010, zuletzt geändert: 16.09.2014
Kategorien: Mysql

Um einfach mal so eben im Skript schon wissen zu können, welche Einstellungen hinsichtlich des verwendeten Zeichensatzes bestehen (wenn man sich nicht sicher ist, je nach Server), kann man einfach via SELECT Abfragen die sogenannten globalen Variablen von MySQL befragen.

SELECT @@global.character_set_database
SELECT @@global.character_set_client
SELECT @@global.character_set_connection

Das führt dann im Idealfall zu dem Ergebnis, dass alle 3 Einstellungen utf8 zurückliefern.

 

Im eben genannten Ideallfall hat man, wenn man UTF8 verwendet, die MySQL Datenbank von Grund aus komplett auf eben UTF8 eingestellt - Datenbankintern, in den Tabellen als auch in der Default Verbindung (Default Connection Charset).

Ist das einmal nicht der Fall, kann es je nach CMS zu häßlichen Randerscheinungen kommen, wie z.B. falschen Zeichen in der DB, wenn man einmal via PhpMyAdmin reinschaut. Oder man spielt Dumps einer Datenbank lokal ein und freut sich über kaputte Umlaute, oder beim Mails versenden weiß man auf einmal gar nicht mehr welche Kodierung die jeweils verwendeten Zeichen denn nun wirklich haben. Mehrmaliges hin oder herkodieren von latin auf utf8 und andersrum führt immer nur zu kaputten Zeichen und am Ende ist man fast verzweifelt.

Wenn man denn nicht doch noch festgestellt hätte, dass die Anwendung oder auch das gerade verwendete CMS Standardmäßig gar kein Connection Charset einstellt und damit als Fallback die Standardeinstellung der MySQL Datenbank hergenommen wird.

Da merkt man dann sehr schnell, dass offenbar Multibyte-Zeichen (utf8) über eine Latin1 Verbindung in eine Multibyte Datenbank geschrieben wurden.
Im CMS selber kann es sein, dass das gar nicht auffällt, aber wenn man die Daten später selbst einmal anzapfen möchte, sei es über Module oder externe Anwendungen, dann kommt man irgendwann in die sogenannte Zeichensatz Hölle und findet sich nicht mehr zurecht.

Also ein Tipp:
Vom Start weg bei allen Anwendungen und Webseiten mit DB Backend immer vom Start weg alles sorgfältig prüfen. PHP Einstellungen, korrekte UTF8 Header Richtung Browser senden und vor allem die Datenbanken inkl. der Verbindungseinstellungen immer durchweg auf UTF8 stellen. Damit sollten dann keine Probleme mehr auftreten.

Und wenn man einmal einen anderen Zeichensatz als UTF8 benötigt, dann kann man immer noch via utf8_decode in einfachere Formate parsen.