Differenze tra utf8 e latino1


128

qual'è la differenza tra utf8 e latin1?


3
Sono codifiche diverse (con alcuni caratteri associati a sequenze di byte comuni, ad esempio i caratteri ASCII e molte lettere accentate). UTF-8 è una codifica di Unicode con tutti i suoi punti di codice; Latin1 codifica meno di 256 caratteri.
ShreevatsaR,

C'è anche latin9 che è disponibile in locali Linux e potrebbe essere menzionato nella domanda: en.wikipedia.org/wiki/ISO/IEC_8859-15
baptx

Risposte:


151

UTF-8 è preparato per il dominio del mondo, Latin1 no.

Se stai cercando di memorizzare caratteri non latini come cinese, giapponese, ebraico, russo, ecc. Usando la codifica Latin1, finiranno per essere mojibake . Potresti trovare utile il testo introduttivo di questo articolo (e ancora di più se conosci un po 'di Java).

Si noti che il supporto completo UTF-8 a 4 byte è stato introdotto solo in MySQL 5.5. Prima di quella versione, arriva solo a 3 byte per carattere, non a 4 byte per carattere. Quindi, supportava solo il piano BMP e non ad esempio il piano Emoji. Se vuoi il pieno supporto UTF-8 a 4 byte, aggiorna MySQL ad almeno 5.5 o scegli un altro RDBMS come PostgreSQL. In MySQL 5.5+ si chiama utf8mb4.


31
Mysql 5.1 supporta 3 byte UTF-8, tuttavia Mysql 5.5 supporta 4 byte UTF-8 come utf8mb4.
velcrow,

2
@BalusC Puoi approfondire in che modo UTF-8 non è pienamente supportato? Vuol dire che Mysql 5.1 non può memorizzare tutti i caratteri Unicode?
Pacerier,

2
@Pacerier: supporta solo 3 byte per carattere, quindi è supportato solo il BMP (i primi 65535 caratteri), il resto no. Per tutti i personaggi, vedi en.wikipedia.org/wiki/Plane_(Unicode)
BalusC

2
@BalusC Per quanto riguarda le persone che utilizzano 5.1.63 e non hanno il privilegio di aggiornare la versione mysql del web server, quali possono essere le alternative?
Pacerier,

6
@Pacerier: potresti salvare come VARBINARYanziché VARCHARe decodificare / codificare nel livello aziendale tu stesso, ma questo è hacky. Valuta di porre una nuova domanda, forse ci sono modi migliori.
BalusC

47

In latino1 ogni carattere è esattamente lungo un byte. In utf8 un personaggio può essere composto da più di un byte. Di conseguenza utf8 ha più caratteri di latin1 (e i caratteri che hanno in comune non sono necessariamente rappresentati dallo stesso byte / bytesequence).


1
Che dire di ascii e bin?
Yousha Aleayoub,

8
@YoushaAleayoub ASCII è una codifica a byte singolo che utilizza i caratteri da 0 a 127, quindi può codificare metà del numero di caratteri latin1. È un sottoinsieme rigoroso di entrambi latin1 e utf8, il che significa che i byte da 0 a 127 in entrambi latin1 e utf8 codificano le stesse cose che fanno in ASCII. Bin non è una codifica. Di solito è un'opzione che puoi dare durante la lettura di un file, dicendo alle funzioni IO di non applicare alcuna codifica, ma invece di leggere il file byte per byte.
sepp2k,

1
grazie, intendevo binaryfascicolare ...? e quale è meglio per i campi inglese / numerici: ascii_general_cioppure ascii_bin?
Yousha Aleayoub,
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.