Simplemente supongo que está configurando la tabla en utf8mb4
, pero la codificación de su conexión está establecida en utf8
. Tienes que configurarlo en utf8mb4
también, de lo contrario MySQL convertirá el utf8mb4
almacenado datos a utf8
, el último de los cuales no puede codificar caracteres Unicode "altos". (Sí, esa es una idiosincrasia de MySQL).
En una conexión MySQL sin procesar, tendrá que verse así:
SET NAMES 'utf8mb4';
SELECT * FROM `my_table`;
Tendrás que adaptar eso a la mejor manera del cliente, dependiendo de cómo te conectes a MySQL desde PHP (mysql, mysqli o PDO).
Para aclarar realmente (sí, usando mysql_
extensión para simplificar, no hagas eso en 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