Die akzeptierte Antwort schlägt ziemlich definitiv die Verwendung von utf8_unicode_ci vor, und während das für neue Projekte großartig ist, wollte ich meine jüngste gegenteilige Erfahrung erzählen, nur für den Fall, dass es jemandem etwas Zeit spart.
Weil utf8_general_ci die Standard-Kollation für Unicode in MySQL ist, müssen Sie, wenn Sie utf8_unicode_ci benutzen wollen, diese in einer Los von Orten.
So haben beispielsweise alle Client-Verbindungen nicht nur einen Standard-Zeichensatz (was ich für sinnvoll halte), sondern auch eine Standard-Sortierreihenfolge (d. h. die Sortierreihenfolge wird bei Unicode immer auf utf8_general_ci gesetzt).
Wenn Sie utf8_unicode_ci für Ihre Felder verwenden, müssen Ihre Skripte, die eine Verbindung zur Datenbank herstellen, wahrscheinlich aktualisiert werden, um die gewünschte Sortierung explizit zu erwähnen - andernfalls können Abfragen mit Textstrings fehlschlagen, wenn Ihre Verbindung die Standardsortierung verwendet.
Das Ergebnis ist, dass Sie bei der Konvertierung eines bestehenden Systems beliebiger Größe nach Unicode/utf8 gezwungen sein können, utf8_general_ci zu verwenden, weil MySQL mit Voreinstellungen umgeht.
45 Stimmen
Nebenbei bemerkt: MySQL's "utf8" ist kein richtiges UTF-8 (keine Unterstützung für 4+ Byte Unicode-Zeichen wie ), aber "utf8mb4" schon. Mit utf8 wird ein Feld beim Einfügen abgeschnitten, beginnend mit dem ersten nicht unterstützten Unicode-Zeichen. mathiasbynens.be/notes/mysql-utf8mb4
8 Stimmen
Ich frage mich, ob wir jemals 5 Bytes für all diese Emojis brauchen werden... seufz.
2 Stimmen
Verwandte Frage: stackoverflow.com/questions/38228335/ "Welche MySQL-Kollation entspricht genau dem String-Vergleich von PHP?"
0 Stimmen
Für einen Überblick über die vernünftigen Optionen: monolune.com/mysql-utf8-charsets-und-kollationen-erläutert