AKTUALIZACE na níže uvedenou odpověď:
Když byla otázka položena, "UTF8" v MySQL znamenalo utf8mb3
. Mezitím utf8mb4
bylo přidáno, ale pokud vím, MySQLs "UTF8" nebylo změněno na utf8mb4
.
To znamená, že byste museli konkrétně zadat "utf8mb4", pokud to myslíte vážně (a měli byste použít utf8mb4
)
Nechám to zde, místo abych jen upravil odpověď, aby bylo jasné, že je stále rozdíl, když říkáte "UTF8"
Původní
Nedoporučoval bych Richiesovi odpovídat, protože kazíte data v databázi. Svůj problém byste nevyřešili, ale pokusili byste se jej „skrýt“ a nebyli schopni provádět základní databázové operace se zpackanými daty.
Pokud narazíte na tuto chybu, buď data, která odesíláte, nemají kódování UTF-8, nebo vaše připojení není UTF-8. Nejprve ověřte, že zdroj dat (soubor, ...) skutečně je UTF-8.
Poté zkontrolujte připojení k databázi, měli byste to udělat po připojení:
SET NAMES 'utf8mb4';
SET CHARACTER SET utf8mb4;
Dále ověřte, že tabulky, kde jsou data uložena, mají znakovou sadu 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`
;
Nakonec zkontrolujte nastavení databáze:
mysql> show variables like '%colla%';
mysql> show variables like '%charac%';
Pokud jsou zdroj, transport a cíl utf8mb4, váš problém je pryč;)