Um auf MySQL Datenbanken zuzugreifen verwende ich gerne die MySQLi-Erweiterung von PHP. Vor ein paar Tagen musste ich dabei feststellen, dass es einen fiesen Fehler in der Methode "set_charset" gibt der zur Folge hat, dass die UTF-8 Unterstützung teilweise nicht funktioniert. Wenn man eine Verbindung zur Datenbank herstellt und dabei den Konstruktor der MySQLi-Klasse verwendet funktioniert das anschließende setzten des UTF-8 Zeichensatzes nicht. Wenn man die Verbindung allerdings mit der Methode "real_connect" öffnet funktioniert es wunderbar.
Ein Codebeispiel:
Funktioniert nicht:
$this->mysqli = new mysqli("host", "user", "pass", "db");
$this->mysqli->set_charset('utf8');
echo $this->mysqli->character_set_name(); // Ausgabe: latin1
Funktioniert:
$this->mysqli = mysqli_init();
$this->mysqli->real_connect("host", "user", "pass", "db");
$this->mysqli->set_charset("utf8");
echo $this->mysqli->character_set_name(); // Ausgabe: utf8
Der Fehler ist hier zwar gemeldet und als closed markiert, tritt bei mir jedoch immer noch auf.