Hovedpunktet i en databasesortering er at bestemme, hvordan data sorteres og sammenlignes.
Stor og store og små bogstaver i strengsammenligninger
SELECT "New York" = "NEW YORK";`
vil returnere true for en versal ufølsom sortering; false for en case-sensitiv.
Hvilken sortering gør hvad kan fortælles af _ci
og _cs
suffiks i samlingens navn. _bin
kollationer gør binære sammenligninger (strenge skal være 100 % identiske).
Sammenligning af omlyd/accenttegn
sorteringen afgør også, om tegn med accent behandles som deres latinske basismodstykker i strengsammenligninger.
SELECT "Düsseldorf" = "Dusseldorf";
SELECT "Èclair" = "Eclair";
vil returnere sandt i førstnævnte tilfælde; falsk i sidstnævnte. Du skal læse beskrivelsen af hver sortering for at finde ud af, hvilken der er hvilken.
Strengesortering
Sorteringen påvirker den måde, strenge sorteres på.
For eksempel
-
Omlyd
Ä Ö Ü
er i slutningen af alfabetet i det finske/svenske alfabetlatin1_swedish_ci
-
de behandles som
A O U
på tysk DIN-1 sortering (latin_german1_ci
) -
og som
AE OE UE
på tysk DIN-2 sortering (latin_german2_ci
). ("telefonbogssortering") -
I
latin1_spanish_ci
, "ñ" (n-tilde) er et separat bogstav mellem "n" og "o".
Disse regler vil resultere i forskellige sorteringsrækkefølger, når der bruges ikke-latinske tegn.
Brug af sorteringer under kørsel
Du skal vælge en sortering for din tabel og dine kolonner, men hvis du ikke har noget imod præstationshittet, kan du tvinge databaseoperationer ind i en bestemt sortering under kørsel ved hjælp af COLLATE
søgeord.
Dette vil sortere table
ved name
kolonne ved hjælp af tyske DIN-2 sorteringsregler:
SELECT name
FROM table
ORDER BY name COLLATE latin1_german2_ci;
Bruger COLLATE
ved runtime vil have præstationsimplikationer, da hver kolonne skal konverteres under forespørgslen. Så tænk dig om to gange, før du anvender dette, gør store datasæt.
MySQL-reference:
- Tegnsæt og sorteringer, som MySQL understøtter
- Eksempler på effekten af sortering
- Sorteringsproblemer