dedlfix: utf8 und latin gemischt?

Beitrag lesen

Hi!

Wenn die Daten in Deiner Datenbank in Latin-1 gespeichert sind, wirst Du auch mit noch so viel fragen nach UTF-8 die gespeicherten Latin-1-Daten bekommen.

Diese Aussage ist nicht richtig. Die Datenbank-Einstellung ist nur ein Defaultwert für neue Tabellen. Deren Wert ist nur ein Defaultwert für neue Felder. Letzlich zählt das was pro Feld eingestellt ist. Wenn der Feldparameter zur Kodierung mit dem tatsächlichen Inhalt übereinstimmt, kommt nun die Verbindung zwischen Client und Server ins Spiel. Die dort ausgehandelte Kodierung ist diejenige, in der MySQL die Daten erwartet und ausliefert. (Konkret sind es drei Konfigurationswerte. Zwei für den Hinweg, einer für das Resultset.) Ist diese zu Verbindungskodierung eine andere als die Feldkodierung, kodiert MySQL die Daten um (was prinzipbedingt nicht für jedes Quelle-Ziel-Kodierungspaar verlustfrei geht).

Von und zum Client spricht die Black-Box MySQL also mit der Verbindungskodierung. Was innen drin passiert ist für den Client belanglos.

Die einzige Möglichkeit, immer UTF-8 zu bekommen, besteht darin, jedes einzelne Item in der Datenbank zu konvertieren - und zur Sicherheit auch alle Eingaben darauf zu prüfen, ob sie in UTF-8 reinkommen, da man bei Daten, die von außen kommen, nie zu sehr sicher gehen kann.

Was auch immer du konvertieren willst ... siehe oben.

Prüfungen sind zwar nicht verkehrt aber im Kodierungsfall verzichtbar. Wenn nicht vorsätzlich am Client manipuliert wurde, sendet der die Daten in der Kodierung der das Formular enthaltenden Seite. (accept-charset-Attribute im Formular werden nicht immer beachtet.)

Lo!