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