2012-07-18 23 views
28

utf16 o utf32? Intento almacenar contenido en muchos idiomas. Algunos de los idiomas utilizan fuentes de doble ancho (por ejemplo, las fuentes japonesas con frecuencia tienen el doble de ancho que las fuentes en inglés). No estoy seguro de qué tipo de base de datos debería estar usando. Cualquier información sobre las diferencias entre estos cuatro conjuntos ...Utf8_general_ci o utf8mb4 o ...?

Respuesta

40

MySQL's utf32 y utf8mb4 (así como el estándar UTF-8) pueden almacenar directamente cualquier carácter especificado por Unicode; el primero tiene un tamaño fijo de 4 bytes por carácter, mientras que el segundo tiene entre 1 y 4 bytes por carácter.

utf8mb3 y el original utf8 sólo puede almacenar los primeros 65.536 puntos de código, que cubrirá CJVK (chino, japonés, Vietnam, Corea), y el uso de 1 a 3 bytes por carácter.

utf16 utiliza 2 bytes para los primeros 65.536 puntos de código y 4 bytes para todo lo demás.

En cuanto a las fuentes, eso es estrictamente visual.

"The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)"

Ver también MySQL documentation for Unicode support.

+5

Para ser extra claro, el comentario sobre 'utf8_general' se aplica a todas las demás colaciones' utf8_ * 'también; todos usarán el juego de caracteres 'utf8mb3' aka' utf8' de MySQL. –

+0

@JohnFlatness Gracias. Tu comentario es justo lo que iba a preguntar sobre el próximo. Aunque pensé que UTF-16 usaba 2 bytes para caracteres mandarín, por ejemplo. Estoy mirando la documentación que me diste, esperando que cubra lo que 65,536 significa. XD –

+0

Los caracteres chinos se encuentran dentro del plano multilingüe básico (los primeros 65.536 puntos de código). –