Dine kolonners data gemmes ved hjælp af et tegnsæt. I dette tilfælde ser det ud til at være utf8.
Når du opererer på disse kolonner (for eksempel laver lighedssammenligninger eller bestilling), anvender MySQL en kollation. Hver kolonne har en standardsortering, som den arver fra tabellens standardsortering.
Indekser har kolonnens standardsortering indbygget i dem, så de kan fungere effektivt.
Du kan lave en lighedssammenligning, der er kvalificeret ved sortering. For eksempel i en JOIN
du kan angive
ON (turkish.village_name COLLATE utf8_general_ci) = euro.village_name
eller måske
ON turkish.village_name = (euro.village_name COLLATE utf8_turkish_ci)
Det burde eliminere din ulovlige blanding af sorteringer uden at kræve, at du ændrer dit bord. Dette kan hjælpe dig med at undgå den databaseændring, du spørger om. Men pas på, brug COLLATE
qualifier kan besejre brugen af et indeks. Hvis du har et stort bord, og du er afhængig af indekser for ydeevne, kan dette være uhensigtsmæssigt.
Så hvad vil der ske, hvis du ændrer dine tabeller for at ændre standardsorteringen?
- Dine data ændres ikke (medmindre du også ændrer tegnsættet). Det er godt.
- Alle indekser, der involverer kolonner med sorteringer, vil blive gendannet.
- Dine sammenligninger og ordrer kan ændre sig. Jeg kan ikke tyrkisk, så jeg kan ikke fortælle dig, hvad der kan gå i stykker. Men for eksempel på spansk bogstaverne N og Ñ er ikke de samme. N kommer før Ñ i en spansk sammenstilling, men i den generelle sammenstilling behandles de som ens. Der kan være et aspekt af det tyrkiske alfabet, der fungerer på samme måde, så din
ORDER BY
resultaterne vil være forkerte.
Men du kan rette det ved at angive en COLLATE
modifikator i din ORDER BY
klausul.
ORDER BY (euro.village_name COLLATE utf8_turkish_ci)