Mysql
 sql >> Database >  >> RDS >> Mysql

UTF-8 vs Latin1 mysql, indici non utilizzati su utf-8

Gli indici possono essere utilizzati solo quando le regole di confronto dell'espressione corrispondono a quelle nella colonna indicizzata.

Se l'espressione è COERCIBILITY è inferiore a quello della colonna (ovvero 2 ), viene eseguito il cast delle regole di confronto della colonna su quelle dell'espressione e l'indice non viene utilizzato.

Normalmente, i letterali hanno COERCIBILITY di 4 e le variabili utente quella di 3 , quindi questo non dovrebbe essere un problema.

Tuttavia, se mescoli diverse regole di confronto in un JOIN o UNION , l'ordine di trasmissione non è garantito.

In questo caso dovresti fornire regole di confronto esplicite alla colonna che stai trasmettendo (molto probabilmente, vuoi trasmettere latin1 a UTF8 ), e questo dovrebbe essere il confronto della colonna a cui stai trasmettendo:

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