Mysql
 sql >> Base de données >  >> RDS >> Mysql

Le schéma d'encodage emoji ultime

utf8 de MySQL charset n'est pas réellement UTF-8 , c'est un sous-ensemble d'UTF-8 ne prenant en charge que le plan de base (caractères jusqu'à U+FFFF). La plupart des emoji utilisent des points de code supérieurs à U+FFFF. utf8mb4 de MySQL est l'UTF-8 réel qui peut coder tous ces points de code. En dehors de MySQL, il n'y a rien de tel que "utf8mb4", il n'y a que UTF-8. Donc :

Encore une fois, rien de tel que "utf8mb4". Les requêtes HTTP POST prennent en charge tous les octets bruts, si votre client envoie des données encodées en UTF-8, tout va bien.

Oui.

Dieu non, utilisez l'UTF-8 brut (utf8mb4 ) pour tout ce qui est saint.

Eh bien, voilà votre problème; canaliser vos données via utf8 de MySQL charset supprimera tous les caractères au-dessus de U+FFFF. Utilisez utf8mb4 tout au long de MySQL.

Vous devrez préciser ce que cela signifie exactement. Les fonctions JSON de PHP devraient pouvoir gérer correctement n'importe quel point de code Unicode, tant qu'il est valide UTF-8 :

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

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