Po prostu zgaduję, że ustawiasz tabelę na utf8mb4
, ale kodowanie połączenia jest ustawione na utf8
. Musisz ustawić go na utf8mb4
również, w przeciwnym razie MySQL skonwertuje przechowywany utf8mb4
dane do utf8
, z których ten ostatni nie może kodować „high” znaków Unicode. (Tak, to specyfika MySQL.)
Na surowym połączeniu MySQL będzie to wyglądać tak:
SET NAMES 'utf8mb4';
SELECT * FROM `my_table`;
Będziesz musiał dostosować to do najlepszego sposobu klienta, w zależności od tego, jak łączysz się z MySQL z PHP (mysql, mysqli lub PDO).
Aby naprawdę wyjaśnić (tak, używając mysql_
rozszerzenie dla uproszczenia, nie rób tego w domu):
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