valid utf8mb4_unicode_ci utf8 not for error edteam code character_set_system change mysql encoding utf-8 character-encoding utf8mb4

utf8mb4_unicode_ci - utf8mb4 mysql



¿Cuál es la diferencia entre utf8mb4 y utf8 charsets en MySQL? (3)

El utf8mb4 caracteres utf8mb4 es útil porque hoy en día necesitamos soporte para almacenar no solo caracteres del lenguaje sino también símbolos, emojis recién introducidos, etc.

Una buena lectura sobre cómo admitir Unicode completo en bases de datos MySQL por Mathias Bynens también puede arrojar algo de luz sobre esto.

¿Cuál es la diferencia entre utf8mb4 y utf8 en MySQL ?

Ya sé acerca de las codificaciones ASCII , UTF-8 , UTF-16 y UTF-32 ; pero tengo curiosidad por saber cuál es la diferencia del grupo de codificaciones utf8mb4 con otros tipos de codificación definidos en MySQL Server .

¿Hay algún beneficio / propuesta especial de usar utf8mb4 lugar de utf8 ?


Tomado del Manual de referencia de MySQL 8.0 :

  • utf8mb4 : una codificación UTF-8 del juego de caracteres Unicode que utiliza de uno a cuatro bytes por carácter.

  • utf8mb3 : una codificación UTF-8 del juego de caracteres Unicode que utiliza de uno a tres bytes por carácter.

En MySQL, utf8 es actualmente un alias para utf8mb3 que está en desuso y se eliminará en una futura versión de MySQL . En ese punto, utf8 se convertirá en una referencia a utf8mb4 .

Entonces, independientemente de este alias, puede configurar conscientemente una codificación utf8mb4 .


UTF-8 es una codificación de longitud variable. En el caso de UTF-8, esto significa que almacenar un punto de código requiere de uno a cuatro bytes. Sin embargo, la codificación de MySQL llamada "utf8" (alias de "utf8mb3") solo almacena un máximo de tres bytes por punto de código.

Por lo tanto, el juego de caracteres "utf8" / "utf8mb3" no puede almacenar todos los puntos de código Unicode: solo admite el rango 0x000 a 0xFFFF, que se denomina " Plano multilingüe básico ". Consulte también Comparación de codificaciones Unicode .

Esto es lo que (una versión anterior de la misma página en) la documentación de MySQL tiene que decir al respecto:

El juego de caracteres llamado utf8 [/ utf8mb3] usa un máximo de tres bytes por carácter y contiene solo caracteres BMP. A partir de MySQL 5.5.3, el conjunto de caracteres utf8mb4 utiliza un máximo de cuatro bytes por carácter que admite caracteres adicionales:

  • Para un carácter BMP, utf8 [/ utf8mb3] y utf8mb4 tienen características de almacenamiento idénticas: los mismos valores de código, la misma codificación, la misma longitud.

  • Para un carácter suplementario, utf8 [/ utf8mb3] no puede almacenar el carácter , mientras que utf8mb4 requiere cuatro bytes para almacenarlo. Como utf8 [/ utf8mb3] no puede almacenar el carácter en absoluto, no tiene caracteres suplementarios en las columnas utf8 [/ utf8mb3] y no necesita preocuparse por convertir caracteres o perder datos al actualizar datos utf8 [/ utf8mb3] de versiones anteriores de MySQL

Entonces, si desea que su columna admita el almacenamiento de caracteres que se encuentran fuera del BMP (y generalmente lo desea), como emoji , use "utf8mb4". Consulte también ¿Cuáles son los caracteres Unicode no BMP más comunes en uso real? .