Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Das ultimative Emoji-Codierungsschema

utf8 von MySQL charset ist nicht wirklich UTF-8 , es ist eine Teilmenge von UTF-8, die nur die Basisebene unterstützt (Zeichen bis zu U+FFFF). Die meisten Emoji verwenden Codepunkte höher als U+FFFF. utf8mb4 von MySQL ist tatsächliches UTF-8 die all diese Codepunkte kodieren kann. Außerhalb von MySQL gibt es so etwas wie "utf8mb4" nicht, es gibt nur UTF-8. Also:

Auch hier gibt es kein "utf8mb4". HTTP-POST-Anforderungen unterstützen alle rohen Bytes, wenn Ihr Client UTF-8-codierte Daten sendet, ist alles in Ordnung.

Ja.

Gott nein, benutze rohes UTF-8 (utf8mb4 ) für alles, was heilig ist.

Nun, da ist Ihr Problem; Kanalisieren Ihrer Daten durch utf8 von MySQL charset verwirft alle Zeichen über U+FFFF. Verwenden Sie utf8mb4 den ganzen Weg durch MySQL.

Was das genau bedeutet, müssen Sie angeben. Die JSON-Funktionen von PHP sollten in der Lage sein, jeden Unicode-Codepunkt problemlos zu verarbeiten, solange es sich um gültiges UTF-8 handelt:

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

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