Je suppose simplement que vous définissez la table sur utf8mb4
, mais votre encodage de connexion est défini sur utf8
. Vous devez le définir sur utf8mb4
également, sinon MySQL convertira le utf8mb4
stocké données en utf8
, ce dernier ne pouvant pas coder les caractères Unicode "élevés". (Oui, c'est une idiosyncrasie de MySQL.)
Sur une connexion MySQL brute, cela devra ressembler à ceci :
SET NAMES 'utf8mb4';
SELECT * FROM `my_table`;
Vous devrez adapter cela au mieux du client, selon la façon dont vous vous connectez à MySQL depuis PHP (mysql, mysqli ou PDO).
Pour vraiment clarifier (oui, en utilisant le mysql_
extension pour plus de simplicité, ne faites pas ça à la maison):
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