dedlfix: mysqli_set_charset utf8 warum?

Beitrag lesen

Tach!

mysqli_set_charset($_sql,"utf8"); Aber warum ist das nötig und ist das der empfehlenswerte Weg?

Es ist empfehlenswert, die gewünschte Kodierung explizit anzugeben statt sich auf einen eingestellten Defaultwert zu verlassen.

MySQL hat eine Menge Möglichkeiten, eine Kodierungsangabe zu setzen. Jede wirkt auf einen anderen Teilaspekt. Ohne zu sehr ins Details zu gehen (ist alles in einem eigenen Kapitel im Handbuch beschrieben), da gibt es mindestes einen Wert für den Server, der als Defaultwert für neu angelegte Datenbanken gilt, wenn man im Create-Database-Statement nichts angibt. Der Datenbankwert wiederum ist ein Default-Wert für neu angelegte Tabellen. Der Tabellenwert ist ein Default-Wert für die Felder. Letztlich zählt für die gespeicherten Daten diese Feldangabe. Daraus folgt, dass jedes Feld anders kodiert sein kann.

Nun muss auch noch bekannt sein, welche Kodierung der Client für seine Statements nimmt, und zusätzlich welche er gern für die Results hätte. MySQL kodiert das gegebenenfalls entsprechend um zwischen den jeweiligen Feldkodierungen und den Verbindungskodierungswerten des jeweiligen Clients. Mit mysqli_set_charset() gibt man nun an, welche Kodierung das sein soll. Diese Funktion setzt alle drei Werte für die Verbindung auf denselben Wert, damit DBMS und Client sich richtig verstehen. Zusätzlich ist das auch noch der Wert, den mysqli_real_escape_string() für sich verwendet. Außerdem gibts da noch das SET NAMES-Statement, das ebenfalls die Verbindungskodierungswerte setzt, abzüglich dem für mysqli_real_escape_string() und andere API-Funktionen. Deswegen ist mysqli_set_charset() vor SET NAMES zu bevorzugen.

dedlfix.