Mysql
 sql >> Base de données >  >> RDS >> Mysql

UTF-8 vs Latin1 mysql, index non utilisés sur utf-8

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