sql >> Databáze >  >> RDS >> Oracle

Nerozumím Collation? (Mysql, RDBMS, znakové sady)

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


  1. Odstranění profilu pošty databáze v SQL Server (T-SQL)

  2. Dočasně deaktivujte všechna omezení cizího klíče

  3. Konfigurace Pentaho Data Integration pro použití Oracle Wallet pro Oracle Cloud

  4. Jak převést časové pásmo v MySQL