MySQL passt Unicode-Zeichen mit ASCII-Version an

8

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!

    
user825466 01.07.2011, 20:32
quelle

5 Antworten

11

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%     
user213154 06.07.2011, 20:15
quelle
4

Natürlich wird das funktionieren:

%Vor%     
user1068477 09.10.2013 01:13
quelle
1

Sie haben die Sortierung auf utf8_unicode_ci gesetzt, was lateinische Zeichen mit Akzent angibt. Weitere Informationen finden Sie hier .

    
borrible 01.07.2011 21:39
quelle
1

Eine Sache, die Sie mit Ihrer Abfrage-Zeichenfolge tun können, ist es zu dekodieren ...

%Vor%

es hat für mich funktioniert. :)

    
Amit Kumar Khare 02.01.2012 14:05
quelle
0

Ich habe herausgefunden, dass Sie das gewünschte Ergebnis mit REGEXP

erhalten %Vor%

Aber das hilft nicht, wenn Sie versuchen, genau nach Namen zu gruppieren.

    
Zeal 07.02.2013 14:17
quelle

Tags und Links