Les index ne peuvent être utilisés que lorsque le classement de l'expression correspond à celui de la colonne indexée.
Si la COERCIBILITY de l'expression est inférieur à celui de la colonne (soit 2 ), le classement de la colonne est converti en celui de l'expression et l'index n'est pas utilisé.
Normalement, les littéraux ont une COERCIBILITY de 4 et les variables utilisateur celle de 3 , cela ne devrait donc pas poser de problème.
Cependant, si vous mélangez différentes collations dans un JOIN ou UNION , l'ordre de diffusion n'est pas garanti.
Dans ce cas, vous devez fournir un classement explicite à la colonne que vous transmettez (très probablement, vous souhaitez transtyper latin1 en UTF8 ), et cela devrait être le classement de la colonne vers laquelle vous diffusez :
SELECT *
FROM utf_table
JOIN latin_table
ON utf_column = latin_column COLLATE UTF8_GENERAL_CI