sql >> Base de Datos >  >> RDS >> Mysql

UTF-8 vs Latin1 mysql, índices no utilizados en utf-8

Los índices solo se pueden usar cuando la intercalación de la expresión coincide con la de la columna indexada.

Si la expresión COERCIBILITY es menor que el de la columna (es decir, 2 ), la intercalación de la columna se convierte en la de la expresión y no se utiliza el índice.

Normalmente, los literales tienen COERCIBILITY de 4 y variables de usuario la de 3 , por lo que esto no debería ser un problema.

Sin embargo, si mezcla diferentes intercalaciones en un JOIN o UNION , el orden de lanzamiento no está garantizado.

En este caso, debe proporcionar una intercalación explícita a la columna que está emitiendo (lo más probable es que desee emitir latin1 a UTF8 ), y esta debería ser la colación de la columna a la que está enviando:

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