Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

O esquema de codificação de emoji final


utf8 do MySQL charset não é realmente UTF-8 , é um subconjunto de UTF-8 que suporta apenas o plano básico (caracteres até U+FFFF). A maioria dos emojis usa pontos de código maiores que U+FFFF. utf8mb4 do MySQL é UTF-8 real que pode codificar todos esses pontos de código. Fora do MySQL não existe "utf8mb4", existe apenas UTF-8. Então:

Novamente, nada como "utf8mb4". As solicitações HTTP POST suportam qualquer byte bruto, se o seu cliente enviar dados codificados em UTF-8, tudo bem.

Sim.

Deus não, use UTF-8 bruto (utf8mb4 ) por tudo o que é sagrado.

Bem, aí está o seu problema; canalizando seus dados através do utf8 do MySQL charset descartará quaisquer caracteres acima de U+FFFF. Use utf8mb4 todo o caminho através do MySQL.

Você terá que especificar o que isso significa exatamente. As funções JSON do PHP devem ser capazes de lidar com qualquer ponto de código Unicode bem, desde que seja UTF-8 válido:
echo json_encode('😀');
"\ud83d\ude00"

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