Eu simplesmente acho que você está configurando a tabela para
utf8mb4
, mas sua codificação de conexão está definida como utf8
. Você deve configurá-lo para utf8mb4
também, caso contrário o MySQL irá converter o utf8mb4
armazenado dados para utf8
, o último dos quais não pode codificar caracteres Unicode "alto". (Sim, isso é uma idiossincrasia do MySQL.) Em uma conexão MySQL bruta, ela terá que ficar assim:
SET NAMES 'utf8mb4';
SELECT * FROM `my_table`;
Você terá que adaptar isso à melhor maneira do cliente, dependendo de como você se conecta ao MySQL a partir do PHP (mysql, mysqli ou PDO).
Para realmente esclarecer (sim, usando o
mysql_
extensão para simplificar, não faça isso em 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