Sven Rautenberg: utf8_unicode_ci oder utf8_general_ci

Beitrag lesen

Moin!

  1. Welche Einstellung sollte ich nehmen, um Daten als UTF-8 in MySQL zu speichern? Unter "Zeichensatz / Kollation der MySQL-Verbindung:" steht utf8_unicode_ci.

Das hängt davon ab, welche Sortierung du haben willst. utf8_unicode_ci und utf8_general_ci unterscheiden sich.

  1. Ist case-insensitive eigentlich sinnvoll bei Vergleichen oder käme auch utf8_bin in Frage?

Das hängt davon ab, was du für Vergleiche machst.

  1. Nach Umstellung eines Projekts auf UTF-8 kommen Eingaben zwar als UTF-8 in den Tabellen an, im PMA werden Umlaute aber nicht richtig dargestellt. Aus einem "ä" wird dann "ä", auf der Website wird es aber richtig als "ä" ausgegeben. Umgekehrt werden direkte Umlauteingaben mit PMA zwar im PMA richtig, dafür aber auf der Website falsch dargestellt. Der PMA hat die Nummer 2.11.4. Sowohl für die Verbindung wie für die Datenbank wie auch für die Tabellen und die enstprechenden Felder ist utf8_unicode_ci eingestellt, es wird per <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> UTF-8 eingestellt, eine Zeichensatzwahl durch Senden eines UTF-8-Header habe ich nicht, da es auch mit meta funktioniert (bzw. sogar ohne). Die Seiten sind mit UTF-8 ohne BOM gespeichert.

Du hast der Datenbank - im Gegensatz zu PHPMyAdmin - nicht mitgeteilt, dass du UTF-8-codierte Strings sendest. Deshalb gilt der Standard, und das ist Latin1. Damit hast du dir deine Umlaute in der Datenbank zerstört, alles, was an UTF-8-Funktionalität wirken könnte, kann nicht mehr wirken. Du mußt alle Texte nochmal unter Latin1 aus der Datenbank auslesen und neu mit UTF-8 wieder hineinschreiben, um sie zu retten.

Der allererste Befehl nach dem DB-Connect muß lauten: SET NAMES utf8. Erst danach dürfen Querys gemacht werden.

  1. Sollte man <meta http-equiv="Charset" content="UTF-8" /> gleichzeitig mit
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> senden? Wenn ich header('Content-Type: text/html; charset=utf-8'); sende, kann im Prinzip auch beides entfallen!?

Da das erste <meta> nicht existiert, sondern nur das zweite, ist die Wahl hier klar. Die äquivalente Header-Angabe hat vor <meta>-Angaben allerdinsg Vorrang und verhindert, dass der Server irgendwoher eine abweichende Angabe verwendet.

- Sven Rautenberg

--
"Love your nation - respect the others."