utf8mb4_unicode_ci vs utf8mb4_bin
Also erst mal sehen, ob ich das richtig:
Ist ein Zeichensatz ist ein Satz von Symbolen und Codierungen. Eine Sortierung ist eine Reihe von Regeln für den Vergleich von Zeichen in einem Zeichensatz.
Sollte ich verwenden utf8mb4, weil mysql utf8 ist ein Betrug, bis-zu-3-bytes und nicht das wahre bis-zu-4-Byte-real utf8-Zeichensatz in PHP zum Beispiel.
Als solche, utf8mb4 ist ein charset und utf8mb4_unicode_ci/utf8mb4_bin sind 2 von seinen vielen verschiedenen Sortierungen verfügbar.
utf8_unicode_ci tun groß-und Kleinschreibung-Vergleich und andere spezielle Vergleiche ( ich habe es vermasselt mit allen die Akzente in Französisch zum Beispiel ) . utf8_bin ist case-sensitive, weil es vergleicht die binärwerte der Zeichen.
Jetzt die Fragen:
-
Wenn ich zum Beispiel ermöglichen wollen, groß- /Kleinschreibung der Anmeldenamen mit utf8mb4_unicode_ci werde ich haben, Dinge zu tun wie:
SELECT name FROM table WHERE BINARY name = 'MyNaMEiSFUlloFUPPERCases';
-
Wenn ich zum Beispiel ermöglichen wollen, Case-insensitive Suche über utf8mb4_bin werde ich haben, Dinge zu tun wie:
SELECT name FROM table WHERE LOWER(name) LIKE '%myname%'
-
Also, welches ist besser ? Was über die schlechten Dinge, die ich höre, über utf8_unicode_ci und die Umlaute/Sonderzeichen ?
Danke 🙂
- So haben die volle Kontrolle, ich denke, ich werde stick zu binären und dann custom Regex, wie schlimmer ist es leistungsmäßig ?
- Wenn Sie möchten, case-folding, aber Akzent, bitte eine Anfrage an bugs.mysql.com .
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hast du "die Dinge richtig"? Ja, Außer, dass ich denke, dass französische Akzente sind 'richtig' im Vergleich in utf8mb4_unicode_520_ci.
Ihre zwei
SELECTs
werden beide zu einem full table scan, und dadurch ineffizient. Der Grund dafür ist, dass Sie das überschreiben der Sortierung (für #1) oder verbergen der Spalte in einer Funktion (LOWER
für #2) oder mit einem führenden Platzhalter (LIKE %...
).Wenn Sie wollen, dass es effizient sein, erklären
name
zuCOLLATION utf8mb4_bin
und tun einfachWHERE name = ...
.Denken Sie einige dieser äquivalenzen und Ordnungen sind 'falsch' für Französisch?
Mehr utf8-Sortierungen.
Dem "520" (neuere) version, die durch Behandlung nicht
Æ
,Ð
,Ł
, undØ
als separate "Buchstaben", und vielleicht andere Dinge.