Os dados de suas colunas são armazenados usando um conjunto de caracteres. Neste caso, parece ser utf8.
Quando você opera nessas colunas (fazendo, por exemplo, comparações de igualdade ou ordenação), o MySQL emprega um agrupamento. Cada coluna tem um agrupamento padrão, que herda do agrupamento padrão da tabela.
Os índices têm o agrupamento padrão da coluna integrado a eles para que possam funcionar com eficiência.
Você pode fazer uma comparação de igualdade qualificada por agrupamento. Por exemplo, em um
JOIN
você pode especificar ON (turkish.village_name COLLATE utf8_general_ci) = euro.village_name
ou talvez
ON turkish.village_name = (euro.village_name COLLATE utf8_turkish_ci)
Isso deve eliminar sua mistura ilegal de agrupamentos sem exigir que você altere sua tabela. Isso pode ajudá-lo a evitar a alteração do banco de dados sobre a qual você está perguntando. Mas cuidado, usando o
COLLATE
qualificador pode derrotar o uso de um índice. Se você tiver uma tabela grande e estiver contando com índices para desempenho, isso pode não ser útil. Então, o que acontecerá se você alterar suas tabelas para alterar o agrupamento padrão?
- Seus dados não serão alterados (a menos que você também altere o conjunto de caracteres). Isso é bom.
- Quaisquer índices envolvendo colunas com agrupamentos serão gerados novamente.
- Suas comparações e pedidos podem mudar. Eu não sei turco, então não posso dizer o que pode quebrar. Mas, por exemplo, em espanhol as letras N e Ñ não são os mesmos. N vem antes de Ñ em um agrupamento espanhol, mas no agrupamento geral eles são tratados da mesma forma. Pode haver algum aspecto do alfabeto turco que funcione da mesma forma, então seu
ORDER BY
os resultados serão incorretos.
Mas você pode corrigir isso especificando um
COLLATE
modificador em seu ORDER BY
cláusula. ORDER BY (euro.village_name COLLATE utf8_turkish_ci)