AKTUALIZUJ na poniższą odpowiedź:
Czas, w którym zadano pytanie, „UTF8” w MySQL oznaczał utf8mb3
. W międzyczasie utf8mb4
został dodany, ale według mojej wiedzy MySQLs "UTF8" nie został zmieniony na utf8mb4
.
Oznacza to, że musisz wpisać „utf8mb4”, jeśli masz na myśli (i powinieneś użyć utf8mb4
)
Zachowam to tutaj, zamiast tylko edytować odpowiedź, aby było jasne, że nadal istnieje różnica przy mówieniu „UTF8”
Oryginał
Nie sugerowałbym odpowiedzi Richiesa, ponieważ niszczysz dane w bazie danych. Nie naprawisz swojego problemu, ale spróbujesz go "ukryć" i nie będziesz w stanie wykonać podstawowych operacji na bazie danych na zniekształconych danych.
Jeśli napotkasz ten błąd, albo przesyłane dane nie są zakodowane w UTF-8, albo Twoje połączenie nie jest w UTF-8. Najpierw sprawdź, czy źródło danych (plik, ...) naprawdę to UTF-8.
Następnie sprawdź połączenie z bazą danych, powinieneś to zrobić po połączeniu:
SET NAMES 'utf8mb4';
SET CHARACTER SET utf8mb4;
Następnie sprawdź, czy tabele, w których przechowywane są dane, mają zestaw znaków utf8mb4:
SELECT
`tables`.`TABLE_NAME`,
`collations`.`character_set_name`
FROM
`information_schema`.`TABLES` AS `tables`,
`information_schema`.`COLLATION_CHARACTER_SET_APPLICABILITY` AS `collations`
WHERE
`tables`.`table_schema` = DATABASE()
AND `collations`.`collation_name` = `tables`.`table_collation`
;
Na koniec sprawdź ustawienia bazy danych:
mysql> show variables like '%colla%';
mysql> show variables like '%charac%';
Jeśli źródło, transport i miejsce docelowe to utf8mb4, Twój problem zniknął;)