На локалке стоит:
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 за наводку.