UTF-8: Allgemein? Behälter? Unicode?
Ich versuche, herauszufinden, welche Sortierung ich mit sollte für verschiedene Arten von Daten. 100% der Inhalte, die ich speichern werden die vom Benutzer eingereicht.
Mein Verständnis ist, dass ich sollte mit UTF-8-General-CI (Case-Insensitive) anstelle von UTF-8 Binär. Aber ich kann nicht finden, eine klare Unterscheidung zwischen UTF-8 General CI und UTF-8-Unicode-CI.
- Soll ich das speichern von Benutzer eingereichte Inhalte in UTF-8 General-oder UTF-8-Unicode-CI Spalten?
- , Welche Art von Daten in UTF-8 Binär-anwendbar sein?
Kommentar zu dem Problem - Öffnen
Seite beachten Sie aber anstelle von
utf8
, utf8mb4
statt für die volle UTF-8 Unterstützung. Kommentieren hier, weil die Antworten auf diese beliebte Frage, nicht Adresse. mathiasbynens.sein/notes/mysql-utf8mb4 Wenn Sie möchten, case-folding, aber Akzent, bitte eine Anfrage an bugs.mysql.com .
Oder klicken Sie auf "Betrifft Mich" auf bugs.mysql.com/bug.php?id=58797 und einen Kommentar hinzufügen.
InformationsquelleAutor der Frage Dolph | 2010-02-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Im Allgemeinen utf8_general_ci ist schneller als utf8_unicode_ci, aber weniger korrekt.
Hier ist der Unterschied:
Zitiert aus:
http://dev.mysql.com/doc/refman/5.0/en/charset-unicode-sets.html
Ausführlichere Erklärung, Lesen Sie bitte den folgenden Beitrag aus der MySQL Foren:
http://forums.mysql.com/read.php?103,187048,188748
Als für utf8_bin:
Beide utf8_general_ci und utf8_unicode_ci ausführen groß- /Kleinschreibung-Vergleich. Kontrastieren, utf8_bin groß-und Kleinschreibung ist (neben anderen unterschieden), denn er vergleicht die binärwerte der Zeichen.
InformationsquelleAutor der Antwort Sagi
Sollten Sie auch der Tatsache bewusst sein, dass mit utf8_general_ci bei der Verwendung der varchar-Feld als unique-oder primary index einfügen 2 Werte wie 'a' und 'á' geben würde, ein duplicate key error.
InformationsquelleAutor der Antwort Alex Hepp
utf8_bin
vergleicht die bits blind. Keinen Fall Falten, kein Akzent Strippen.utf8_general_ci
vergleicht ein byte mit einem byte. Es tut Fall Faltung und Akzent Strippen, aber keine 2-Zeichen-Vergleiche:ij
ist nicht gleichij
in dieser Sortierung.utf8_*_ci
ist ein Satz von sprachspezifischen Regeln, aber sonst wieunicode_ci
. Einige spezielle Fälle:Ç
,Č
,ch
,ll
utf8_unicode_ci
folgt einer alten Unicode-standard für Vergleiche.ij
=ij
, aberae
!=æ
utf8_unicode_520_ci
folgt ein neuer Unicode-standard.ae
=æ
Sehen Sortierung Diagramm für details auf, was ist gleich, was in verschiedenen utf8-Sortierungen.
utf8
, definiert durch MySQL beschränkt sich auf 1 - bis 3-byte-utf8-codes. Dies lässt sich Emoji und einige Chinesen. So sollten Sie wirklich wechseln zuutf8mb4
wenn Sie möchten, gehen Sie viel über Europa hinaus.Die oben genannten Punkte gelten für
utf8mb4
nach geeigneten Schreibweise ändern. In Zukunftutf8mb4
undutf8mb4_unicode_520_ci
bevorzugt werden.InformationsquelleAutor der Antwort Rick James
Wirklich, getestet habe ich das speichern von Werten wie 'é' und 'e' in der Spalte mit einzigartige index und verursachen Sie doppelten Fehler auf beiden 'utf8_unicode_ci' und 'utf8_general_ci'. Können Sie Sie speichern nur in "utf8_bin' sortierte Spalte.
- Und mysql-docs (in http://dev.mysql.com/doc/refman/5.7/en/charset-applications.html) empfehlen in Ihren Beispielen set 'utf8_general_ci' Sortierung.
InformationsquelleAutor der Antwort vitalii