Jednoduše bych odhadl, že nastavujete tabulku na utf8mb4
, ale kódování vašeho připojení je nastaveno na utf8
. Musíte jej nastavit na utf8mb4
také, jinak MySQL převede uložený utf8mb4
data do utf8
, z nichž druhý neumí kódovat "vysoké" znaky Unicode. (Ano, to je idiosynkrazie MySQL.)
Na nezpracovaném připojení MySQL to bude muset vypadat takto:
SET NAMES 'utf8mb4';
SELECT * FROM `my_table`;
Budete to muset přizpůsobit nejlepšímu způsobu klienta v závislosti na tom, jak se připojujete k MySQL z PHP (mysql, mysqli nebo PDO).
Abych to opravdu objasnil (ano, pomocí mysql_
rozšíření pro jednoduchost, nedělejte to doma):
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