Huvudpunkten med en databaskollation är att bestämma hur data sorteras och jämförs.
Skiftlägeskänslighet för strängjämförelser
SELECT "New York" = "NEW YORK";`
kommer att returnera sant för en skiftlägesokänslig sortering; falskt för en skiftlägeskänslig.
Vilken sammanställning gör vilket kan ses av _ci
och _cs
suffix i kollationens namn. _bin
sammanställningar gör binära jämförelser (strängar måste vara 100 % identiska).
Jämförelse av omljud/accenttecken
sorteringen avgör också om tecken med accent ska behandlas som deras latinska basmotsvarigheter i strängjämförelser.
SELECT "Düsseldorf" = "Dusseldorf";
SELECT "Èclair" = "Eclair";
kommer att återkomma sant i det förra fallet; falskt i det senare. Du måste läsa beskrivningen för varje sortering för att ta reda på vilken som är vilken.
Strängsortering
Sorteringen påverkar hur strängar sorteras.
Till exempel,
-
Umlauts
Ä Ö Ü
finns i slutet av alfabetet i det finska/svenska alfabetetlatin1_swedish_ci
-
de behandlas som
A O U
på tyska DIN-1 sortering (latin_german1_ci
) -
och som
AE OE UE
på tyska DIN-2-sortering (latin_german2_ci
). ("telefonbok" sortering) -
I
latin1_spanish_ci
, "ñ" (n-tilde) är en separat bokstav mellan "n" och "o".
Dessa regler kommer att resultera i olika sorteringsordningar när icke-latinska tecken används.
Använda sorteringar vid körning
Du måste välja en sortering för din tabell och kolumner, men om du inte har något emot prestandaträffen kan du tvinga databasoperationer till en viss sortering vid körning med COLLATE
nyckelord.
Detta kommer att sortera table
med name
kolumn med tyska DIN-2 sorteringsregler:
SELECT name
FROM table
ORDER BY name COLLATE latin1_german2_ci;
Använder COLLATE
vid körning kommer att få prestandaimplikationer, eftersom varje kolumn måste konverteras under frågan. Så tänk två gånger innan du tillämpar detta gör stora datamängder.
MySQL-referens:
- Teckenuppsättningar och sorteringar som MySQL stöder
- Exempel på effekten av sortering
- Sorteringsproblem