Domanda

Riesco a leggere la documentazione MySQL ed è abbastanza chiaro. Ma come si decide quale set di caratteri utilizzare? Su quali dati ha effetto la raccolta?

Sto chiedendo una spiegazione dei due e come sceglierli.

È stato utile?

Soluzione

Da MySQL docs :

  

Un set di caratteri è un insieme di simboli   e codifiche. Un confronto è un insieme di   regole per confrontare i caratteri in a   set di caratteri. Facciamo il   distinzione chiara con un esempio di   un set di caratteri immaginari.

     

Supponiamo di avere un alfabeto con   quattro lettere: 'A', 'B', 'a', 'b'. Noi   assegna a ogni lettera un numero: 'A' = 0,   'B' = 1, 'a' = 2, 'b' = 3. La lettera   'A' è un simbolo, il numero 0 è il   codifica per "A" e la combinazione   di tutte e quattro le lettere e la loro   la codifica è un set di caratteri.

     

Ora supponiamo di voler confrontare   due valori di stringa, 'A' e 'B'. Il   il modo più semplice per farlo è guardare   le codifiche: 0 per 'A' e 1 per   'B'. Perché 0 è inferiore a 1, diciamo   'A' è inferiore a 'B'. Ora, quello che abbiamo   appena fatto è applicare un confronto al nostro   set di caratteri. La raccolta è un set   di regole (solo una regola in questo caso):   " confronta le codifiche. " Questo lo chiamiamo   la più semplice di tutte le regole di confronto a   fascicolazione binaria.

     

Ma cosa succede se vogliamo dire che il   sono lettere minuscole e maiuscole   equivalente? Quindi avremmo   almeno due regole: (1) trattare il   lettere minuscole 'a' e 'b' come   equivalente a "A" e "B"; (2) quindi   confrontare le codifiche. Lo chiamiamo a   confronto senza distinzione tra maiuscole e minuscole. È un   poco più complesso di un binario   collazione.

     

Nella vita reale, la maggior parte dei set di personaggi ha   molti personaggi: non solo "A" e "B"   ma interi alfabeti, a volte   alfabeti multipli o scrittura orientale   sistemi con migliaia di caratteri,   insieme a molti simboli speciali e   segni di punteggiatura. Anche nella vita reale,   la maggior parte delle regole di confronto ha molte regole: no   solo insensibilità al case ma anche   insensibilità all'accento (un "accento" è a   segno attaccato a un personaggio come in   Tedesco "& # 246;") e carattere multiplo   mappature (come la regola che '& # 246;' =   "OE" in uno dei due tedeschi   Le regole di confronto).

Altri suggerimenti

Una codifica dei caratteri è un modo per codificare i caratteri in modo che si adattino alla memoria. Cioè, se il set di caratteri è ISO-8859-15, il simbolo dell'euro, & # 8364 ;, verrà codificato come 0xa4 e in UTF-8, sarà 0xe282ac.

La collation è come confrontare i caratteri, in latino9, ci sono lettere come e & # 233; & # 232; & # 234; f , se ordinato in base alla loro rappresentazione binaria, andrà e f & # 233; & # 234; & # 232; ma se le regole di confronto sono impostate, ad esempio, sul francese, le avrai nell'ordine in cui pensavi che fossero, che è tutto e & # 233; & # 232; & # 234; sono uguali, quindi f .

Un set di caratteri è un sottoinsieme di tutti i glifi scritti. Una codifica dei caratteri specifica il modo in cui tali caratteri sono associati a valori numerici. Alcune codifiche di caratteri, come UTF-8 e UTF-16, possono codificare qualsiasi carattere nel set di caratteri universale. Altri, come US-ASCII o ISO-8859-1, possono codificare solo un piccolo sottoinsieme, poiché usano rispettivamente 7 e 8 bit per carattere. Poiché molti standard specificano sia un set di caratteri che una codifica dei caratteri, il termine "set di caratteri" viene spesso sostituito liberamente per la "codifica dei caratteri".

Le regole di confronto comprendono regole che specificano come confrontare i caratteri per l'ordinamento. Le regole di confronto possono essere specifiche della locale: l'ordine corretto di due caratteri varia da lingua a lingua.

La scelta di un set di caratteri e delle regole di confronto dipende dal fatto che l'applicazione sia internazionalizzata o meno. In caso contrario, a quale lingua ti rivolgi?

Per scegliere il set di caratteri che vuoi supportare, devi considerare la tua applicazione. Se si memorizzano input forniti dall'utente, potrebbe essere difficile prevedere tutte le impostazioni locali in cui verrà eventualmente utilizzato il software. Per supportarli tutti, potrebbe essere meglio supportare UCS (Unicode) dall'inizio. Tuttavia, c'è un costo per questo; molti caratteri dell'Europa occidentale ora richiedono due byte di memoria per carattere anziché uno.

La scelta delle regole di confronto corrette può aiutare le prestazioni se il database utilizza le regole di confronto per creare un indice e successivamente utilizza tale indice per fornire risultati ordinati. Tuttavia, poiché le regole di confronto sono spesso specifiche della locale, quell'indice sarà inutile se è necessario ordinare i risultati secondo le regole di un'altra locale.

Suggerisco di usare utf8mb4_unicode_ci , che si basa sullo standard Unicode per l'ordinamento e il confronto, che ordina in modo accurato in una vasta gamma di lingue.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top