Hlavním bodem porovnávání databáze je určení, jak jsou data tříděna a porovnávána.
Rozlišování malých a velkých písmen při porovnávání řetězců
SELECT "New York" = "NEW YORK";`
vrátí hodnotu true pro třídění bez ohledu na malá a velká písmena; false pro případ, kdy se rozlišují malá a velká písmena.
Který způsob řazení se dá zjistit pomocí _ci
a _cs
přípona v názvu kolace. _bin
kolace provádějí binární srovnání (řetězce musí být 100% identické).
Porovnání přehlásek a znaků s diakritikou
řazení také určuje, zda se znaky s diakritikou při porovnávání řetězců považují za jejich protějšky se základní latinkou.
SELECT "Düsseldorf" = "Dusseldorf";
SELECT "Èclair" = "Eclair";
vrátí true v prvním případě; falešný v tom druhém. Budete si muset přečíst popis každého řazení, abyste zjistili, které je které.
Řazení podle řetězců
Porovnání ovlivňuje způsob řazení řetězců.
Například
-
Přehlásky
Ä Ö Ü
jsou na konci abecedy ve finské/švédské abecedělatin1_swedish_ci
-
jsou považovány za
A O U
v německém třídění DIN-1 (latin_german1_ci
) -
a jako
AE OE UE
v německém třídění DIN-2 (latin_german2_ci
). (třídění podle "telefonního seznamu") -
V
latin1_spanish_ci
, "ñ" (n-tilda) je samostatné písmeno mezi "n" a "o".
Tato pravidla budou mít za následek odlišné pořadí řazení, pokud se použijí jiné než latinské znaky.
Použití řazení za běhu
Musíte si vybrat řazení pro tabulku a sloupce, ale pokud vám nevadí snížení výkonu, můžete za běhu vynutit databázové operace do určitého řazení pomocí COLLATE
klíčové slovo.
Tím se seřadí table
podle name
sloupec pomocí německých pravidel třídění DIN-2:
SELECT name
FROM table
ORDER BY name COLLATE latin1_german2_ci;
Pomocí COLLATE
za běhu bude mít dopad na výkon, protože každý sloupec musí být během dotazu převeden. Takže si to dvakrát rozmyslete, než to použijete, proveďte velké soubory dat.
Reference MySQL:
- Znakové sady a řazení, které MySQL podporuje
- Příklady účinku řazení
- Problémy s řazením