sql >> Base de Datos >  >> RDS >> Mysql

Usando utf8mb4 con php y mysql

utf8 de MySQL la codificación es no UTF-8 real. Es una codificación que es un poco como UTF-8, pero solo admite un subconjunto de lo que admite UTF-8. utf8mb4 es real UTF-8. Esta diferencia es un detalle de implementación interna de MySQL. Ambos se ven como UTF-8 en el lado de PHP. Si usa utf8 o utf8mb4 , PHP obtendrá UTF-8 válido en ambos casos.

Lo que debe asegurarse es que la codificación de conexión entre PHP y MySQL se establece en utf8mb4 . Si está configurado en utf8 , MySQL no admitirá todos los caracteres. Configura esta codificación de conexión usando mysql_set_charset() , el PDO charset Parámetro de conexión DSN o cualquier otro método que sea apropiado para la API de base de datos que elija.

mb_internal_encoding simplemente establece el valor predeterminado para $encoding parámetro todo mb_* funciones tienen. No tiene nada que ver con MySQL.

UTF-8 y UTF-32 difieren en la forma en que codifican los caracteres. UTF-8 usa un mínimo de 1 byte por carácter y un máximo de 4. UTF-32 siempre utiliza 4 bytes para cada carácter. UTF-16 usa un mínimo de 2 bytes y un máximo de 4.
Debido a su longitud variable, UTF-8 tiene un poco de sobrecarga. Un carácter que se puede codificar en 2 bytes en UTF-16 puede tomar 3 o 4 en UTF-8; por otro lado, UTF-16 nunca usa menos de 2 bytes. Si está almacenando mucho texto asiático, UTF-16 puede usar menos almacenamiento. Si la mayor parte de su texto es inglés/ASCII, UTF-8 usa menos almacenamiento. UTF-32 siempre usa la mayor cantidad de almacenamiento.