sql >> Database teknologi >  >> RDS >> Mysql

Effekter af at opdatere en tabel med rækker fra utf8_turkish_ci til utf8_general_ci?

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?

  1. Dine data ændres ikke (medmindre du også ændrer tegnsættet). Det er godt.
  2. Alle indekser, der involverer kolonner med sorteringer, vil blive gendannet.
  3. 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)



  1. Grundlæggende om tabeludtryk, del 6 – Rekursive CTE'er

  2. MySQL:Få et rækkenummer (rangering) for en specifik række

  3. SQL Server tilføjer auto-increment primær nøgle til eksisterende tabel

  4. PHP - få data fra databasen sammenlign det med variabel og sorter efter mindre værdi