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

El último esquema de codificación de emoji

utf8 de MySQL charset no es realmente UTF-8 , es un subconjunto de UTF-8 que solo admite el plano básico (caracteres hasta U+FFFF). La mayoría de los emoji usan puntos de código superiores a U+FFFF. utf8mb4 de MySQL es UTF-8 real que puede codificar todos esos puntos de código. Fuera de MySQL no existe tal cosa como "utf8mb4", solo existe UTF-8. Entonces:

Nuevamente, no hay tal cosa como "utf8mb4". Las solicitudes HTTP POST admiten cualquier byte sin procesar, si su cliente envía datos codificados en UTF-8, está bien.

Sí.

Dios no, usa UTF-8 sin formato (utf8mb4 ) por todo lo que es santo.

Bueno, ahí está tu problema; canalizando sus datos a través de utf8 de MySQL charset descartará cualquier carácter por encima de U+FFFF. Utilice utf8mb4 todo el camino a través de MySQL.

Tendrás que especificar qué significa eso exactamente. Las funciones JSON de PHP deberían poder manejar cualquier punto de código Unicode sin problemas, siempre que sea UTF-8 válido:

echo json_encode('😀');
"\ud83d\ude00"

echo json_decode('"\ud83d\ude00"');
😀