MySQL
версия:
mysql Ver 14.14 Distrib 5.6.40, for Linux (x86_64) using EditLine wrapper
Я установил utf8mb4
на database
, table
, column
, используя следующие команды:
ALTER DATABASE my_db CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
И MySQL сообщает, что:
mysql> show create database my_db;
+----------+---------------------------------------------------------------------+
| Database | Create Database |
+----------+---------------------------------------------------------------------+
| my_db | CREATE DATABASE `my_db` /*!40100 DEFAULT CHARACTER SET utf8mb4 */ |
+----------+---------------------------------------------------------------------+
1 row in set (0.00 sec)
А также таблица:
ALTER TABLE my_tbl CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci
Mysql
сообщает, что:
...
) ENGINE=InnoDB AUTO_INCREMENT=14894 DEFAULT CHARSET=utf8mb4
Теперь само поле также конвертируется:
ALTER TABLE my_tbl MODIFY body mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
Он сообщает, что:
`body` mediumtext
Кажется, все в порядке. Когда я подключаюсь к mySQL
через python, я устанавливаю параметры сортировки:
my_connection.set_character_set('utf8mb4')
Теперь, когда я вставляю данные, появляется сообщение об ошибке:
OperationalError: (1366, "Incorrect string value: '\\xF0\\x9F\\x98\\x9E</...' for column 'body' at row 1")
Почему выдает такую ошибку? Как мне решить эту проблему? Или есть ли обходной путь для этого?
Редактировать часть-1:
CREATE TABLE `my_tbl` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`for_id` varchar(100) NOT NULL,
`uid` varchar(50) DEFAULT NULL,
`sent_at` datetime DEFAULT NULL,
`rec_type` varchar(30) DEFAULT NULL,
`body` mediumtext CHARACTER SET utf8mb4,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=112774 DEFAULT CHARSET=utf8mb4
Вышеуказанный набор символов находится на моем столе. Перед столбцом не видно тип сортировки. Как я уже говорил, у меня есть команда Modify
command. Здесь что-то не так?
В my.cnf
Я установил ниже и перезапустил mysql:
[mysqld]
collation-server = utf8mb4_general_ci
init-connect='SET NAMES utf8mb4'
character-set-server = utf8mb4
skip-character-set-client-handshake
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4