Ich würde einfach vermuten, dass Sie die Tabelle auf utf8mb4
setzen , aber Ihre Verbindungscodierung ist auf utf8
eingestellt . Sie müssen es auf utf8mb4
setzen ebenfalls, andernfalls konvertiert MySQL den gespeicherten utf8mb4
Daten nach utf8
, wobei letztere keine "hohen" Unicode-Zeichen codieren können. (Ja, das ist eine Eigenheit von MySQL.)
Bei einer unformatierten MySQL-Verbindung muss es so aussehen:
SET NAMES 'utf8mb4';
SELECT * FROM `my_table`;
Sie müssen dies an die beste Art des Clients anpassen, je nachdem, wie Sie sich von PHP aus mit MySQL verbinden (mysql, mysqli oder PDO).
Um es wirklich zu verdeutlichen (ja, mit dem mysql_
Erweiterung der Einfachheit halber, machen Sie das nicht zu Hause):
mysql_connect(...);
mysql_select_db(...);
mysql_set_charset('utf8mb4'); // adapt to your mysql connector of choice
$r = mysql_query('SELECT * FROM `my_table`');
var_dump(mysql_fetch_assoc($r)); // data will be UTF8 encoded