Dina kolumner data lagras med hjälp av en teckenuppsättning. I det här fallet verkar det vara utf8.
När du använder dessa kolumner (till exempel gör jämställdhetsjämförelser eller beställer), använder MySQL en sammanställning. Varje kolumn har en standardsortering, som den ärver från tabellens standardsortering.
Index har kolumnens standardsortering inbakad i sig så att de kan fungera effektivt.
Du kan göra en jämställdhetsjämförelse som kvalificeras genom sammanställning. Till exempel i en JOIN
du kan ange
ON (turkish.village_name COLLATE utf8_general_ci) = euro.village_name
eller kanske
ON turkish.village_name = (euro.village_name COLLATE utf8_turkish_ci)
Det borde eliminera din illegala blandning av kollationer utan att du behöver ändra ditt bord. Detta kan hjälpa dig att undvika databasändringen du frågar om. Men se upp, använd COLLATE
kvalificerare kan besegra användningen av ett index. Om du har ett stort bord och förlitar dig på index för prestanda kan detta vara föga användbart.
Så, vad händer om du ändrar dina tabeller för att ändra standardsorteringen?
- Din data kommer inte att ändras (om du inte också ändrar teckenuppsättningen). Det är bra.
- Alla index som involverar kolumner med sorteringar kommer att återskapas.
- Dina jämförelser och beställningar kan ändras. Jag kan inte turkiska, så jag kan inte berätta vad som kan gå sönder. Men till exempel på spanska bokstäverna N och Ñ är inte samma. N kommer före Ñ i en spansk sammanställning, men i den allmänna sammanställningen behandlas de som samma. Det kan finnas någon aspekt av det turkiska alfabetet som fungerar likadant, så din
ORDER BY
resultaten blir felaktiga.
Men du kan fixa det genom att ange en COLLATE
modifierare i din ORDER BY
klausul.
ORDER BY (euro.village_name COLLATE utf8_turkish_ci)