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
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:
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).