sql >> Database >  >> RDS >> Oracle

Ik begrijp Collatie niet? (Mysql, RDBMS, Tekensets)

Het belangrijkste punt van een databasesortering is bepalen hoe gegevens worden gesorteerd en vergeleken.

Hoofdlettergevoeligheid van tekenreeksvergelijkingen

SELECT "New York" = "NEW YORK";` 

zal true retourneren voor een hoofdletterongevoelige sortering; false voor een hoofdlettergevoelige.

Welke sortering wat doet, kan worden afgelezen aan de _ci en _cs achtervoegsel in de naam van de sortering. _bin collations doen binaire vergelijkingen (strings moeten 100% identiek zijn).

Vergelijking van umlauten/tekens met accenten

de sortering bepaalt ook of tekens met accenten worden behandeld als hun Latijnse tegenhangers in tekenreeksvergelijkingen.

SELECT "Düsseldorf" =  "Dusseldorf";
SELECT "Èclair" =      "Eclair";

zal true retourneren in het eerste geval; vals in het laatste. Je moet de beschrijving van elke sortering lezen om erachter te komen welke welke is.

Stringsortering

De sortering beïnvloedt de manier waarop strings worden gesorteerd.

Bijvoorbeeld

  • Umlauten Ä Ö Ü staan ​​aan het einde van het alfabet in het fins/zweedse alfabet latin1_swedish_ci

  • ze worden behandeld als A O U in Duitse DIN-1 sortering (latin_german1_ci )

  • en als AE OE UE in Duitse DIN-2 sortering (latin_german2_ci ). ("telefoonboek" sorteren)

  • In latin1_spanish_ci , "ñ" (n-tilde) is een aparte letter tussen "n" en "o".

Deze regels zullen resulteren in verschillende sorteervolgorden wanneer niet-Latijnse karakters worden gebruikt.

Collaties gebruiken tijdens runtime

U moet een sortering voor uw tabel en kolommen kiezen, maar als u de prestatiehit niet erg vindt, kunt u databasebewerkingen tijdens runtime tot een bepaalde sortering dwingen met behulp van de COLLATE trefwoord.

Dit sorteert table door de name kolom met Duitse DIN-2-sorteerregels:

SELECT name
FROM table
ORDER BY name COLLATE latin1_german2_ci;

COLLATE gebruiken at runtime heeft gevolgen voor de prestaties, aangezien elke kolom tijdens de query moet worden geconverteerd. Denk dus twee keer na voordat u dit toepast, doe grote datasets.

MySQL-referentie:

  • Tekensets en verzamelingen die MySQL ondersteunt
  • Voorbeelden van het effect van sorteren
  • Collatieproblemen


  1. Hoe REPLACE() werkt in MariaDB

  2. Maak een database-e-mailaccount in SQL Server (T-SQL)

  3. Geef waarden door die uit een bestand zijn gelezen als invoer voor een SQL-query in Oracle

  4. Wat is de perfecte toolbox voor PL/SQL-ontwikkeling?