Also zuerst mal sehen, ob ich es richtig:utf8mb4_unicode_ci vs utf8mb4_bin
A charset eine Reihe von Symbolen und Kodierungen ist. Eine Kollatierung ist eine Reihe von Regeln zum Vergleichen von Zeichen in einem Zeichensatz.
Ich sollte utf8mb4 verwenden, weil mysql utf8 ist ein Betrug, bis zu 3 Bytes und nicht die wahre bis zu 4-Byte echte utf8 Zeichensatz in PHP zum Beispiel.
Als solcher ist utf8mb4 ein Zeichensatz und utf8mb4_unicode_ci/utf8mb4_bin sind 2 seiner vielen verschiedenen verfügbaren Kollationen.
utf8_unicode_ci Vergleiche Groß- und Kleinschreibung und andere spezielle Vergleiche (Ich habe gehört, dass es mit allen Akzenten in Französisch zum Beispiel versaut). utf8_bin unterscheidet zwischen Groß- und Kleinschreibung, da es die Binärwerte des Zeichens vergleicht.
Nun die Fragen:
1. Wenn zum Beispiel ich will Case-Sensitive-Login-Namen ermöglichen, mit utf8mb4_unicode_ci ich muss Dinge tun:
SELECT name FROM table WHERE BINARY name = 'MyNaMEiSFUlloFUPPERCases';
?
SELECT name FROM table WHERE LOWER(name) LIKE '%myname%'
: Dinge tun, wie
2. Wenn zum Beispiel möchte ich Case-insensitive Suche Ich werde mit utf8mb4_bin ermöglichen?
3. Also welches ist besser? Was ist mit den schlechten Dingen, die ich über utf8_unicode_ci und die Akzente/andere Sonderzeichen höre?
Danke :)
Um volle Kontrolle zu haben, denke ich, dass ich bei der binären und dann benutzerdefinierten Regex bleiben werde, wie schlechter ist es leistungsmäßig? – shrimpdrake
Wenn Sie möchten, dass die Groß- und Kleinschreibung nicht berücksichtigt wird, wenden Sie sich bitte an http://bugs.mysql.com. –