utf8
MySQL zestaw znaków w rzeczywistości nie jest UTF-8 , jest to podzbiór UTF-8 obsługujący tylko podstawową płaszczyznę (znaki do U+FFFF). Większość emoji używa punktów kodowych wyższych niż U + FFFF. utf8mb4
MySQL to rzeczywisty kod UTF-8 który może zakodować wszystkie te punkty kodowe. Poza MySQL nie ma czegoś takiego jak „utf8mb4”, jest tylko UTF-8. A więc:
Znowu nie ma czegoś takiego jak „utf8mb4”. Żądania HTTP POST obsługują dowolne nieprzetworzone bajty, jeśli Twój klient wysyła dane zakodowane w UTF-8, wszystko jest w porządku.
Tak.
Boże nie, użyj surowego UTF-8 (utf8mb4
) za wszystko, co jest święte.
Cóż, jest twój problem; przekazywanie danych przez utf8
MySQL charset odrzuci wszystkie znaki powyżej U+FFFF. Użyj utf8mb4
przez całą drogę przez MySQL.
Musisz dokładnie określić, co to oznacza. Funkcje JSON PHP powinny być w stanie obsłużyć każdy punkt kodowy Unicode, o ile jest poprawny UTF-8:
echo json_encode('😀');
"\ud83d\ude00"
echo json_decode('"\ud83d\ude00"');
😀