Persönlich würde ich mit utf8_unicode_ci
gehen, wenn Sie erwarten, dass Briefkasten im Allgemeinen nicht wichtig ist für die Ergebnisse, die Sie finden möchten.
Collations werden nicht nur zur Laufzeit verwendet, sondern auch, wenn MySQL Indizes erstellt. Wenn also eine dieser Spalten in einem Index erscheint, wird das Finden von Daten gemäß den Vergleichsregeln dieser Kollatierung so schnell wie möglich sein.
In den Fällen, in denen keine Groß-/Kleinschreibung beachtet werden soll, gelten sie nicht für die obere oder untere Ebene. Wenden Sie stattdessen das Schlüsselwort BINARY
vor der Spalte utf8 an, um einen literalen Code-Point-Vergleich zu erzwingen, und nicht einen Vergleich nach der Sortierung.
mysql> create table utf8 (name varchar(24) charset utf8 collate utf8_general_ci, primary key (name));
Query OK, 0 rows affected (0.14 sec)
mysql> insert into utf8 values ('Roland');
Query OK, 1 row affected (0.00 sec)
mysql> insert into utf8 values ('roland');
ERROR 1062 (23000): Duplicate entry 'roland' for key 'PRIMARY'
mysql> select * from utf8 where name = 'roland';
+--------+
| name |
+--------+
| Roland |
+--------+
1 row in set (0.00 sec)
mysql> select * from utf8 where binary name = 'roland';
Empty set (0.01 sec)
Dies sollte viel schneller sein als die untere oder obere verwenden, da in diesen Fällen MySQL muss zunächst eine Kopie der Spalte Wert machen und seine Schreibweise ändern, und dann den Vergleich gelten. Wenn BINARY vorhanden ist, wird einfach der Index zuerst verwendet, um Übereinstimmungen zu finden, und dann wird ein Codepunkt durch Codepunktvergleich durchgeführt, bis die Werte nicht gleich sind, was im Allgemeinen schneller ist.
also was soll ich verwenden .be spezifische –
Wie gesagt, Sie sollten diese Entscheidung basierend auf was Sie brauchen. Von dem, was ich über das, was Sie tun wollen, sehe, würde ich selbst mit utf8_general_ci gehen. –
Gibt es einen Nachteil bei der Verwendung von lower() mit utf8_bin –