Eu li a documentação 'Usando COLLATE em instruções SQL' https://dev.mysql.com/doc/refman/8.0/en/charset-collate.html , mas não diz muito sobre o efeito do uso de diferentes valores COLLATE aos exemplos. Apenas como exemplo,
SELECT *
FROM t1
WHERE k LIKE _latin1 'Müller' COLLATE latin1_german2_ci;
Qual é a diferença entre usar valores diferentes depois COLLATE
? E se você não usar a COLLATE
cláusula? Como encontrar os valores corretos ou possíveis para usar depois COLLATE
?
faria com que ambos os lados tivessem o mesmo agrupamento, quando o banco de dados não consegue comparar os dados e apresenta o seguinte erro ou similar
E também existe a possibilidade de fazer um cs (diferencia maiúsculas de minúsculas 'ABC não é igual a 'abc') para um ci comparações sem distinção entre maiúsculas e minúsculas, então 'ABC' seria igual a 'abc' ou vice-versa
Ou... O Optimizer não seria capaz de usar um índice.
É melhor (para desempenho) que tudo tenha o mesmo agrupamento:
Ter que alternar agrupamentos 'em tempo de execução' é caro.
Ou eu o uso para ver como diferentes agrupamentos lidam com acentos, etc.
Observe que um índice contém os dados armazenados em um determinado conjunto de caracteres e agrupamento. Qualquer necessidade de desviar disso elimina a capacidade de usar o índice para desempenho.