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