Jag skulle helt enkelt gissa att du ställer in tabellen till utf8mb4
, men din anslutningskodning är inställd på utf8
. Du måste ställa in den på utf8mb4
också, annars konverterar MySQL den lagrade utf8mb4
data till utf8
, varav den senare inte kan koda "höga" Unicode-tecken. (Ja, det är en MySQL-särlek.)
På en rå MySQL-anslutning måste den se ut så här:
SET NAMES 'utf8mb4';
SELECT * FROM `my_table`;
Du måste anpassa det till det bästa sättet för klienten, beroende på hur du ansluter till MySQL från PHP (mysql, mysqli eller PDO).
För att verkligen förtydliga (ja, med hjälp av mysql_
för enkelhets skull, gör inte det hemma):
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