Qual è la differenza tra collation e set di caratteri?


Risposte:


27

Set di caratteri è un elenco di simboli. Se confronti ASCII con latin1 , con latin1 sarai in grado di scrivere tutte le parole americane perché latin1 contiene tutti i caratteri ASCII , che sono sufficienti per scrivere qualsiasi parola inglese. Al contrario, con ASCII non sarai in grado di scrivere tutte le parole delle lingue specifiche dell'Europa occidentale, perché ad esempio mancano caratteri come 'À', 'ë', 'õ', 'Ñ'.

Le regole di confronto riguardano il confronto tra personaggi. Definisce un insieme di regole per confrontare i caratteri di un set di caratteri.

In MySQL, le regole di confronto sono spesso correlate a una lingua (ad esempio "latin1_swedish_ci", "latin1_german1_ci", ecc.). Quando ordini una query selezionata, una parola che inizia con 'ö' viene inserita tra due parole che iniziano con 'o' e 'p' in alcune lingue (con alcune regole di confronto). Ma con un'altra raccolta, questo personaggio può essere posizionato completamente alla fine, il che rende diversa la selezione risultante.


Grazie, è quasi chiaro ora. Quindi penso che la selezione delle regole di confronto sia una seria preoccupazione durante la pianificazione di un sito multilingue? Ad esempio, se le regole di confronto sono "latin1_swedish_ci", non otterrò i risultati previsti mentre mi occupo delle lingue unicode.
Shameer,

1
Ti suggerirei di andare per Unicode o finirai per avere dei problemi ad un certo punto (lingue asiatiche per esempio). Le regole di confronto dipenderanno dalla lingua dell'utente. Questo è qualcosa con cui devi stare attento se vuoi avere uno strumento multilingue.
deadalnix,

6

Come risposta precedente, il set di caratteri è un insieme di caratteri (lettere, numeri, ideogrammi ecc.) Assegnati a un numero; per poterli vedere, devi avere il carattere (le piccole "immagini" che leggiamo). Erano importanti usando LatinX, perché per ogni X, lo stesso numero (byte) poteva riferirsi a un carattere diverso.

Oggi è più importante selezionare la codifica: lo standard è UTF-8, la rappresentazione di maggior successo di Unicode (compatibile con ASCII ma così flessibile da includere tutte le lingue, anche cinese e giapponese) e lo standard W3C. In altre parole, include tutti i set di caratteri.

Collazione: questa è una parola vecchio stile, derivata dal latino. Significa: confrontare una copia (manoscritto) con l'originale per trovare differenze (errori o modifiche). È stato molto utile in passato, ma ora è quasi un arcaismo perché i nostri documenti e libri sono scritti usando il computer e la copia è sempre identica all'originale. Esempio: in italiano (derivato dal latino) c'è il verbo "collazionare", ma è nei dizionari e nessuno lo usa.

Pertanto, le regole di confronto definiscono il comportamento degli operatori di confronto: =,>, <, <=,> = ...

Ovviamente quegli operatori vengono usati per decidere se due stringhe sono uguali o se una parola è "maggiore" di un'altra, molto importante se vogliamo ordinare. Le lettere non sono nello stesso ordine per ogni lingua, quindi una parola può essere più grande di un'altra usando una collazione, ma non usando un'altra. Vedi [1] per un esempio pratico.

  • le regole di confronto "bin" sono le più rigorose: SELEZIONA "b" = "B" => FALSE

  • le regole di confronto "ci" non fanno distinzione tra maiuscole e minuscole: SELECT "b" = "B" => TRUE

  • il "generale" tende a ignorare alcune differenze: SELEZIONA "a" = "à" => TRUE

  • altri sono specifici per una o più lingue. Esempio "svedese" (non so perché lo svedese sia spesso un valore predefinito)

Sto ancora cercando un sito web in cui il comportamento di ogni fascicolo sia descritto in dettaglio ... quegli esempi sono dovuti alla mia esperienza.

[1] http://www.olcot.co.uk/sql-blogs/revised-difference-between-collation-sql_latin1_general_cp1_ci_as-and-latin1_general_ci_as


1
lo svedese è ancora predefinito in alcuni bit di MySQL. La sua eredità da quando MySQL è stato creato da una piccola squadra in Svezia nel '95
Chris Wood,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.