@apptester

Mysql выдает ошибку на не UTF8 символы, как исправить?

На локалке стоит:
mysql  Ver 14.14 Distrib 8.0.0-dmr, for Linux (x86_64) using  EditLine wrapper
PHP 5.6.29
Yii2 2.0.12

Задача: парсинг нескольких сайтов.
Проблема: при записи текста в таблицу MySql выдает:
Error: SQLSTATE[HY000]: General error: 1366 Incorrect string value: '\xD1\x82\xD0\xBE \xD0...' for column 'content' at row 1

Единственный толковый ответ, который удалось найти это пост https://mathiasbynens.be/notes/mysql-utf8mb4
После прочтения статьи:

параметры (SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%')
*************************** 1. row ***************************
Variable_name: character_set_client
        Value: utf8mb4
*************************** 2. row ***************************
Variable_name: character_set_connection
        Value: utf8mb4
*************************** 3. row ***************************
Variable_name: character_set_database
        Value: utf8mb4
*************************** 4. row ***************************
Variable_name: character_set_filesystem
        Value: binary
*************************** 5. row ***************************
Variable_name: character_set_results
        Value: utf8mb4
*************************** 6. row ***************************
Variable_name: character_set_server
        Value: utf8mb4
*************************** 7. row ***************************
Variable_name: character_set_system
        Value: utf8
*************************** 8. row ***************************
Variable_name: collation_connection
        Value: utf8mb4_unicode_ci
*************************** 9. row ***************************
Variable_name: collation_database
        Value: utf8mb4_unicode_ci
*************************** 10. row ***************************
Variable_name: collation_server
        Value: utf8mb4_unicode_ci
10 rows in set (0.00 sec)


таблица (SHOW CREATE TABLE)
Table: post
Create Table: CREATE TABLE `post` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `created_at` int(11) NOT NULL,
  `updated_at` int(11) NOT NULL,
  `url` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `title` varchar(2048) COLLATE utf8mb4_unicode_ci NOT NULL,
  `content` text COLLATE utf8mb4_unicode_ci NOT NULL,
  `status` smallint(6) DEFAULT '10',
  PRIMARY KEY (`id`),
  UNIQUE KEY `post_url_unq` (`url`),
) ENGINE=InnoDB AUTO_INCREMENT=164 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci


Ошибка никуда не делась, так теперь еще и мускул уходит в даун. Если я правильно понимаю то это и есть обычные UTF8 символы, но мускул что-то чудит, или я. Как с этим жить?

UPD 1:
параметры (SHOW VARIABLES WHERE Variable_name LIKE '%char%'\)
*************************** 1. row ***************************
Variable_name: character_set_client
        Value: utf8mb4
*************************** 2. row ***************************
Variable_name: character_set_connection
        Value: utf8mb4
*************************** 3. row ***************************
Variable_name: character_set_database
        Value: utf8mb4
*************************** 4. row ***************************
Variable_name: character_set_filesystem
        Value: binary
*************************** 5. row ***************************
Variable_name: character_set_results
        Value: utf8mb4
*************************** 6. row ***************************
Variable_name: character_set_server
        Value: utf8mb4
*************************** 7. row ***************************
Variable_name: character_set_system
        Value: utf8
*************************** 8. row ***************************
Variable_name: character_sets_dir
        Value: /usr/share/mysql/charsets/


UPD 2:
Нашел решение в объявлении колонки как LONGBLOB, остальные, хотя вроде и разумные методы, не работают :(
https://stackoverflow.com/a/15945126
Спасибо ThunderCat за наводку.
  • Вопрос задан
  • 6063 просмотра
Решения вопроса 1
ThunderCat
@ThunderCat Куратор тега MySQL
{PHP, MySql, HTML, JS, CSS} developer
Пригласить эксперта
Ответы на вопрос 2
@freeLander
Я тоже пробовал изменить кодировку таблицы на utf8mb4 и это тоже не помогло, но помогло изменение кодировки самого поля:
ALTER TABLE `table` MODIFY `column` VARCHAR(255) CHARSET utf8mb4 null;
Ответ написан
Комментировать
@vdev85
collation-server=utf8mb4_general_ci
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы