sql >> Databasteknik >  >> RDS >> Oracle

Jag förstår inte Collation? (Mysql, RDBMS, teckenuppsättningar)

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 alfabetet latin1_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


  1. Kör batchfil med psql-kommandot utan lösenord

  2. Best Practices för PostgreSQL-revisionsloggning

  3. Postgres - Funktion för att returnera skärningspunkten mellan 2 ARRAY?

  4. Vilken kolumntyp/längd ska jag använda för att lagra ett hashat Bcrypt-lösenord i en databas?