Direi semplicemente che stai impostando la tabella su utf8mb4
, ma la codifica della tua connessione è impostata su utf8
. Devi impostarlo su utf8mb4
anche, altrimenti MySQL convertirà il utf8mb4
memorizzato dati a utf8
, l'ultimo dei quali non può codificare caratteri Unicode "alti". (Sì, è un'idiosincrasia di MySQL.)
Su una connessione MySQL grezza, dovrà apparire così:
SET NAMES 'utf8mb4';
SELECT * FROM `my_table`;
Dovrai adattarlo al modo migliore del client, a seconda di come ti connetti a MySQL da PHP (mysql, mysqli o PDO).
Per chiarire davvero (sì, usando mysql_
estensione per semplicità, non farlo a casa):
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