Il punto principale di una raccolta di database è determinare come i dati vengono ordinati e confrontati.
Maiuscole/minuscole nei confronti delle stringhe
SELECT "New York" = "NEW YORK";`
restituirà true per le regole di confronto senza distinzione tra maiuscole e minuscole; false per una distinzione tra maiuscole e minuscole.
Quale confronto fa ciò che può essere detto da _ci
e _cs
suffisso nel nome della raccolta. _bin
le regole di confronto eseguono confronti binari (le stringhe devono essere identiche al 100%).
Confronto di dieresi/caratteri accentati
le regole di confronto determinano anche se i caratteri accentati vengono trattati come le loro controparti in base latina nei confronti di stringhe.
SELECT "Düsseldorf" = "Dusseldorf";
SELECT "Èclair" = "Eclair";
ritornerà vero nel primo caso; falso in quest'ultimo. Dovrai leggere la descrizione di ogni confronto per scoprire quale.
Ordinamento delle stringhe
Le regole di confronto influenzano il modo in cui le stringhe vengono ordinate.
Ad esempio,
-
Dieresi
Ä Ö Ü
sono alla fine dell'alfabeto nell'alfabeto finlandese/svedeselatin1_swedish_ci
-
sono trattati come
A O U
in tedesco ordinamento DIN-1 (latin_german1_ci
) -
e come
AE OE UE
in tedesco ordinamento DIN-2 (latin_german2_ci
). (ordinamento "rubrica") -
In
latin1_spanish_ci
, "ñ" (n-tilde) è una lettera separata tra "n" e "o".
Queste regole risulteranno in ordinamenti diversi quando vengono utilizzati caratteri non latini.
Utilizzo delle regole di confronto in fase di esecuzione
Devi scegliere un confronto per la tabella e le colonne, ma se non ti dispiace il calo delle prestazioni, puoi forzare le operazioni del database in un determinato confronto in fase di esecuzione utilizzando COLLATE
parola chiave.
Questo ordinerà table
dal name
colonna utilizzando le regole di ordinamento DIN-2 tedesche:
SELECT name
FROM table
ORDER BY name COLLATE latin1_german2_ci;
Usando COLLATE
in fase di esecuzione avrà implicazioni sulle prestazioni, poiché ogni colonna deve essere convertita durante la query. Quindi pensaci due volte prima di applicare questo set di dati di grandi dimensioni.
Riferimento MySQL:
- Set di caratteri e confronti supportati da MySQL
- Esempi dell'effetto di confronto
- Problemi di confronto