2010-04-25 41 views
96

qual è la differenza tra utf8 e latin1?Differenze tra utf8 e latin1

+2

Sono codifiche diverse (con * alcuni * caratteri mappati su sequenze di byte comuni, ad esempio i caratteri ASCII e molte lettere accentate). UTF-8 è una codifica di Unicode con tutti i suoi codepoints; Latin1 codifica meno di 256 caratteri. – ShreevatsaR

risposta

30

In latino1 ogni carattere è esattamente lungo un byte. In utf8 un personaggio può essere costituito 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).

+0

Che dire di ascii e bin? –

+4

@YoushaAleayoub ASCII è una codifica a byte singolo che utilizza i caratteri da 0 a 127, quindi può codificare metà dei caratteri latini1. È un sottoinsieme rigoroso di latin1 e utf8, ovvero 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 quando leggi un file, dicendo alle funzioni IO di non applicare alcuna codifica, ma invece leggi il file byte per byte. – sepp2k

+0

grazie, volevo dire collare 'binary' ...? e quale è migliore per i campi inglese/numerico: "ascii_general_ci' o" ascii_bin'? –

115

UTF-8 è preparato per la dominazione del mondo, Latin1 no.

Se si sta tentando di archiviare caratteri non latini come il cinese, il giapponese, l'ebraico, il cirillico, ecc. Utilizzando la codifica Latin1, verranno visualizzati come mojibake. Puoi trovare utile il testo introduttivo di this article (e anche di più se conosci un po 'di Java).

Nota che il supporto completo per UTF-8 è stato introdotto solo in MySQL 5.5. Prima di quella versione, va solo fino a 3 byte, non 4 byte per carattere. Se vuoi il supporto completo per UTF-8, aggiorna MySQL ad almeno 5.5 o scegli un altro RDBMS come PostgreSQL.

+0

è 4 byte per punto di codice, non carattere. –

+27

Mysql 5.1 supporta 3 byte UTF-8, tuttavia Mysql 5.5 [supporta] (http://dev.mysql.com/doc/refman/5.5/en/charset-unicode.html) 4 byte UTF-8 come utf8mb4. – velcrow

+0

È vero, ma MySQL 5.5 non era GA al momento della pubblicazione della risposta. È stato rilasciato a dicembre 2010. – BalusC