ATUALIZAÇÃO para a resposta abaixo:
Quando a pergunta foi feita, "UTF8" no MySQL significava
utf8mb3
. Enquanto isso, utf8mb4
foi adicionado, mas que eu saiba MySQLs "UTF8" não foi alterado para significar utf8mb4
. Isso significa que você precisa colocar especificamente "utf8mb4", se quiser (e deve usar
utf8mb4
) Vou manter isso aqui em vez de apenas editar a resposta, para deixar claro que ainda há uma diferença ao dizer "UTF8"
Original
Eu não sugeriria a resposta de Richies, porque você está estragando os dados dentro do banco de dados. Você não resolveria seu problema, mas tentaria "escondê-lo" e não conseguir realizar operações essenciais de banco de dados com os dados degradados.
Se você encontrar esse erro, os dados que você está enviando não são codificados em UTF-8 ou sua conexão não é UTF-8. Primeiro, verifique se a fonte de dados (um arquivo, ...) realmente é UTF-8.
Em seguida, verifique sua conexão com o banco de dados, você deve fazer isso após a conexão:
SET NAMES 'utf8mb4';
SET CHARACTER SET utf8mb4;
Em seguida, verifique se as tabelas onde os dados estão armazenados possuem o conjunto de caracteres 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`
;
Por último, verifique as configurações do seu banco de dados:
mysql> show variables like '%colla%';
mysql> show variables like '%charac%';
Se a origem, transporte e destino forem utf8mb4, seu problema acabou;)