UTF-8 vs Latin1 mysql, Indizes nicht auf utf-8 verwendet

8

Ich habe versucht, meine mysql-Tabellen mit UTF-8 und Latin1 Char-Sets zu erstellen. Wenn ich Latin1 verwende, werden meine Indizes verwendet, wenn ich UTF-8 verwende, werden Indizes nicht verwendet, wenn Datensätze ausgewählt / begrenzt werden. Gibt es etwas, das mir bei den Char-Sets fehlt, die das verursachen?

Prost

Ke

    
Ke. 15.02.2010, 13:35
quelle

3 Antworten

7

Indizes können nur verwendet werden, wenn die Sortierung des Ausdrucks mit der der indizierten Spalte übereinstimmt.

Wenn der COERCIBILITY des Ausdrucks niedriger ist als der der Spalte (also 2 ), wird die Kollatierung der Spalte an die des Ausdrucks übergeben, und der Index wird nicht verwendet.

Normalerweise haben Literale COERCIBILITY von 4 und Benutzervariablen die von 3 , also sollte dies kein Problem sein.

Wenn Sie jedoch verschiedene Sortierungen in JOIN oder UNION mischen, ist die Cast-Reihenfolge nicht garantiert.

In diesem Fall sollten Sie eine explizite Sortierung für die von Ihnen gesandte Spalte bereitstellen (höchstwahrscheinlich möchten Sie latin1 in UTF8 umwandeln), und dies sollte die Sortierung der Spalte sein, in die Sie konvertieren:

%Vor%     
Quassnoi 15.02.2010, 13:43
quelle
3

Ich verstehe das jetzt, die Tabellen, an denen ich teilnahm, waren nicht vom gleichen Zeichensatz

%Vor%

Sobald ich diese geändert habe, funktionierten die Indizes gut.

    
Ke. 15.02.2010 13:40
quelle
1

Die Indizes selbst werden mit derselben Codierung wie die Spalten gespeichert, die sie indexieren. Der Vergleich eines UTF-8-Zeichens mit einem latin1-Zeichen kann den Index nicht verwenden, da er beide in dieselbe Codierung konvertieren müsste, da die Indexoptimierungen auf Byteebene ausgeführt werden (und ß in latin1 ein anderes Byte hat) Sequenz als in UTF-8).

    
soulmerge 15.02.2010 13:40
quelle

Tags und Links