Oracle
 sql >> Database >  >> RDS >> Oracle

Non capisco Collazione? (Mysql, RDBMS, set di caratteri)

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/svedese latin1_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