AGGIORNAMENTO alla seguente risposta:
Quando è stata posta la domanda, "UTF8" in MySQL significava utf8mb3
. Nel frattempo, utf8mb4
è stato aggiunto, ma per quanto ne so MySQLs "UTF8" non è stato cambiato in utf8mb4
.
Ciò significa che dovresti inserire specificamente "utf8mb4", se lo intendi (e dovresti usare utf8mb4
)
Lo terrò qui invece di modificare semplicemente la risposta, per chiarire che c'è ancora una differenza quando si dice "UTF8"
Originale
Non suggerirei la risposta di Richies, perché stai rovinando i dati all'interno del database. Non risolveresti il tuo problema, ma proveresti a "nasconderlo" e non essere in grado di eseguire operazioni di database essenziali con i dati schifosi.
Se riscontri questo errore, i dati che stai inviando non sono codificati UTF-8 o la tua connessione non è UTF-8. Innanzitutto, verifica che l'origine dati (un file, ...) veramente è UTF-8.
Quindi, controlla la connessione al database, dovresti farlo dopo la connessione:
SET NAMES 'utf8mb4';
SET CHARACTER SET utf8mb4;
Successivamente, verifica che le tabelle in cui sono archiviati i dati abbiano il set di caratteri 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`
;
Infine, controlla le impostazioni del database:
mysql> show variables like '%colla%';
mysql> show variables like '%charac%';
Se sorgente, trasporto e destinazione sono utf8mb4, il tuo problema è scomparso;)