Ich verwende MySQL 5.1.50 und habe eine Tabelle, die so aussieht:
%Vor%Das Problem, das ich habe, ist, dass MySQL Unicode-Zeichen mit ASCII-Versionen zusammenbringt. Wenn ich beispielsweise nach einem Wort suche, das ein 'é' enthält, wird dasselbe Wort mit einem 'e' verglichen und umgekehrt:
%Vor%Ich bekomme diese Ergebnisse sowohl von PHP als auch von der Kommandozeilenkonsole. Wie kann ich genaue Übereinstimmungen von meinen SELECT-Abfragen erhalten?
Danke!
Sie haben die name
-Spalte als text CHARACTER SET utf8 COLLATE utf8_unicode_ci
angegeben, die MySQL anweist, e und é als gleichwertig beim Vergleichen und Sortieren zu betrachten. Diese Sortierung und utf8_general_ci
machen viele Dinge gleichwertig.
Ссылка ist eine großartige Ressource, sobald Sie lernen, wie man die Charts liest, was ziemlich einfach ist.
Wenn Sie möchten, dass e und é usw. als unterschiedlich angesehen werden, müssen Sie eine andere Sortierung wählen. Um herauszufinden, welche Kollatierungen sich auf Ihrem Server befinden (vorausgesetzt, Sie sind auf die UTF-8-Kodierung beschränkt):
%Vor%Und wählen Sie die Vergleichsdiagramme als Referenz.
Eine weitere spezielle Sortierung ist utf8_bin
, in der es keine Äquivalenzen gibt, es ist eine binäre Übereinstimmung.
Die einzigen mir bekannten MySQL Unicode-Sortierungen, die nicht sprachspezifisch sind, sind utf8_unicode_ci
, utf8_general_ci
und utf8_bin
. Sie sind ziemlich komisch. Der eigentliche Zweck einer Kollatierung besteht darin, den Computer so anzupassen und zu sortieren, wie eine Person von irgendwo erwarten würde. Ungarisch und Türkisch Wörterbücher haben ihre Einträge nach verschiedenen Regeln geordnet. Wenn Sie eine Sortierung angeben, können Sie diese lokalen Regeln sortieren und zuordnen.
Zum Beispiel scheint es, dass Dänen e und é als gleichwertig betrachten, aber Isländer nicht:
%Vor%Ein weiterer praktischer Trick besteht darin, eine Tabelle mit einer Spalte mit einer Menge von Zeichen zu füllen, die Sie interessieren (aus einem Skript ist das einfacher), und dann kann MySQL Ihnen die Äquivalenzen mitteilen:
%Vor%Eine Sache, die Sie mit Ihrer Abfrage-Zeichenfolge tun können, ist es zu dekodieren ...
%Vor%es hat für mich funktioniert. :)