АКТУАЛИЗИРАНЕ на отговора по-долу:
Когато въпросът беше зададен, "UTF8" в MySQL означаваше utf8mb3
. Междувременно utf8mb4
беше добавен, но доколкото ми е известно MySQLs "UTF8" не беше превключен да означава utf8mb4
.
Това означава, че ще трябва специално да поставите "utf8mb4", ако го имате предвид (и трябва да използвате utf8mb4
)
Ще запазя това тук, вместо просто да редактирам отговора, за да стане ясно, че все още има разлика, когато казвате „UTF8“
Оригинал
Не бих предложил отговор на Ричис, защото прецаквате данните в базата данни. Няма да отстраните проблема си, но се опитайте да го „скриете“ и да не можете да извършвате основни операции с базата данни с изрязаните данни.
Ако срещнете тази грешка, или данните, които изпращате, не са кодирани с UTF-8, или връзката ви не е UTF-8. Първо, проверете дали източникът на данни (файл, ...) наистина е UTF-8.
След това проверете връзката си с базата данни, трябва да направите това след свързване:
SET NAMES 'utf8mb4';
SET CHARACTER SET utf8mb4;
След това проверете дали таблиците, където се съхраняват данните, имат набор от знаци 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`
;
Накрая проверете настройките на вашата база данни:
mysql> show variables like '%colla%';
mysql> show variables like '%charac%';
Ако източникът, транспортът и дестинацията са utf8mb4, проблемът ви е изчезнал;)