Risposte:
Fondamentalmente, come ordinare e confrontare le stringhe.
Esempi:
confrontando:
Ordinamento:
Equivalenza di carattere speciale
Alcuni SQL (SQL Server 2008+)
DECLARE @foo TABLE (bar varchar(2))
INSERT @foo VALUES ('z'), ('æ'), ('ø'), ('å'), ('ss'), ('ß'), ('a'), ('ä')
SELECT * FROM @foo ORDER BY bar COLLATE Finnish_Swedish_100_CI_AS
SELECT * FROM @foo ORDER BY bar COLLATE Norwegian_100_CI_AS
SELECT * FROM @foo ORDER BY bar COLLATE Latin1_General_100_CS_AS --german (western europe) and default
SELECT * FROM @foo ORDER BY bar COLLATE German_PhoneBook_100_CS_AS
"Collation" è probabilmente meglio definito su etymology.com,
fine del 14c. "atto di riunire e confrontare"
Non è cambiato affatto negli ultimi 600 anni. "fascicolazione" significa "mettere insieme" e, indipendentemente dal fatto che si tratti di un ordine cronologico o di altro tipo in un database, è tutto uguale.
Per quanto riguarda l'Informatica, ciò che stiamo facendo è separare il meccanismo di archiviazione dall'ordinamento . Potresti aver sentito parlare di ASCII-betical . Ciò si riferisce a un confronto basato sulla codifica binaria di caratteri ASCII. In quel sistema, archiviazione e regole di confronto sono due nello stesso. Se la "codifica" standardizzata ASCII dovesse mai cambiare, anche la "collation" (ordine) cambierebbe.
POSIX ha iniziato a romperlo con LC_COLLATE
. Ma mentre ci spostiamo in Unicode è emerso un consorzio per standardizzare anche le regole di confronto: ICU.
Nelle specifiche SQL ci sono due estensioni per fornire regole di confronto,
F690
: "Supporto per le regole di confronto:
Include collation name
, collation clause
, collation definition
e drop collation
.
F692
: Supporto di confronto esteso,
Include il collegamento di regole di confronto predefinite diverse a una colonna nello schema.
In sostanza, forniscono la possibilità CREATE
e le DROP
regole di confronto, di specificarle per operatori e ordinamenti e di definire un valore predefinito per le colonne.
Per ulteriori informazioni su ciò che SQL ha da offrire,
Invece di incollare un esempio limitato, ecco la suite di test PostgreSQL che è piuttosto estesa. Dai un'occhiata almeno al primo link e cerca'Türkiye' COLLATE "tr-x-icu" ILIKE '%KI%' AS "false"
collate.icu.utf8.out
collate.linux.utf8.out
collate.out
Probabilmente non vale la pena dare un'occhiata, ma l'ho inserito qui per completezza, noiosi controlli POSIX.