2010-04-25 59 views
96

¿cuál es la diferencia entre utf8 y latin1?Diferencias entre utf8 y latin1

+2

Son codificaciones diferentes (con * algunos * caracteres asignados a secuencias de bytes comunes, por ejemplo, los caracteres ASCII y muchas letras acentuadas). UTF-8 es una codificación de Unicode con todos sus puntos de código; Latin1 codifica menos de 256 caracteres. – ShreevatsaR

Respuesta

30

En latin1 cada personaje tiene exactamente un byte de longitud. En utf8 un personaje puede constar de más de un byte. En consecuencia, utf8 tiene más caracteres que latin1 (y los caracteres que tienen en común no están necesariamente representados por el mismo byte/bytesecuencia).

+0

¿Qué hay de ascii y bin? –

+4

@YoushaAleayoub ASCII es una codificación de un solo byte que utiliza los caracteres 0 a 127, por lo que puede codificar la mitad de caracteres que latin1. Es un subconjunto estricto de latin1 y utf8, lo que significa que los bytes 0 a 127 en latin1 y utf8 codifican las mismas cosas que en ASCII. Bin no es una codificación. Por lo general, es una opción que puede dar cuando lee un archivo, indicando a las funciones de IO que no apliquen ninguna codificación, sino que simplemente lee el byte de archivo por byte. – sepp2k

+0

gracias, me refería a la compilación 'binaria' ...? y cuál es mejor para los campos en inglés/numéricos: 'ascii_general_ci' o' ascii_bin'? –

115

UTF-8 está preparado para la dominación del mundo, Latin1 no lo es.

Si intenta almacenar caracteres no latinos como chino, japonés, hebreo, cirílico, etc. utilizando la codificación Latin1, entonces terminarán como mojibake. Puede encontrar útil el texto introductorio de this article (y aún más si conoce un poco Java).

Tenga en cuenta que la compatibilidad total con UTF-8 solo se introdujo en MySQL 5.5. Antes de esa versión, solo llega a 3 bytes, no a 4 bytes por personaje. Si desea soporte completo para UTF-8, actualice MySQL a al menos 5.5 o elija otro RDBMS como PostgreSQL.

+0

es 4 bytes por punto de código, no carácter. –

+27

Mysql 5.1 admite 3 bytes UTF-8, pero Mysql 5.5 [no admite] (http://dev.mysql.com/doc/refman/5.5/en/charset-unicode.html) 4 bytes UTF-8 como utf8mb4. – velcrow

+0

Cierto, pero MySQL 5.5 no era GA en el momento en que se publicó esta respuesta. Fue lanzado en diciembre de 2010. – BalusC