MySQL:s utf8
teckenuppsättningen är faktiskt inte UTF-8 , det är en delmängd av UTF-8 som endast stöder grundplanet (tecken upp till U+FFFF). De flesta emoji använder kodpunkter högre än U+FFFF. MySQL:s utf8mb4
är verklig UTF-8 som kan koda alla dessa kodpunkter. Utanför MySQL finns det inget som heter "utf8mb4", det finns bara UTF-8. Så:
Återigen, inget sådant som "utf8mb4". HTTP POST-förfrågningar stöder alla råbyte, om din klient skickar UTF-8-kodad data går det bra.
Ja.
Gud nej, använd rå UTF-8 (utf8mb4
) för allt som är heligt.
Tja, där är ditt problem; kanalisera din data genom MySQL:s utf8
charset kommer att kassera alla tecken ovanför U+FFFF. Använd utf8mb4
hela vägen genom MySQL.
Du måste specificera exakt vad det betyder. PHP:s JSON-funktioner borde kunna hantera vilken Unicode-kodpunkt som helst, så länge den är giltig UTF-8:
echo json_encode('😀');
"\ud83d\ude00"
echo json_decode('"\ud83d\ude00"');
😀