Mysql
 sql >> Datenbank >  >> RDS >> Mysql

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

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

Wenn COERCIBILITY des Ausdrucks kleiner ist als der der Spalte (also 2 ), wird die Sortierung der Spalte in die des Ausdrucks umgewandelt und der Index wird nicht verwendet.

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

Wenn Sie jedoch verschiedene Sortierungen in einem JOIN mischen oder UNION , die Besetzungsreihenfolge ist nicht garantiert.

In diesem Fall sollten Sie der Spalte, die Sie umwandeln, eine explizite Sortierung bereitstellen (höchstwahrscheinlich möchten Sie latin1 umwandeln zu UTF8 ), und dies sollte die Sortierung der Spalte sein, in die Sie umwandeln:

SELECT  *
FROM    utf_table
JOIN    latin_table
ON      utf_column = latin_column COLLATE UTF8_GENERAL_CI