При попытке вставить ???? (например, 4-байтовый символ Юникода) и MySQL (5.7), и MariaDB (10.2/10.3/10.4) выдают одну и ту же ошибку:
Incorrect string value: '\xF0\x9F\x92\xA9'
Заявление:
mysql> insert into bob (test) values ('????');
Вот кодировка/сопоставление моей базы данных:
mysql> select @@collation_database; +----------------------+
| @@collation_database |
+----------------------+
| utf8mb4_unicode_ci |
+----------------------+
1 row in set (0.00 sec)
mysql> SELECT @@character_set_database; +--------------------------+
| @@character_set_database |
+--------------------------+
| utf8mb4 |
+--------------------------+
1 row in set (0.00 sec)
Набор символов сервера:
mysql> show global variables like '%character_set_server%'\G; *************************** 1. row ***************************
Variable_name: character_set_server
Value: utf8mb4
Таблица:
create table bob ( `test` TEXT NOT NULL );
mysql> SHOW FULL COLUMNS FROM bob;
+-------+------+--------------------+------+-----+---------+-------+---------------------------------+---------+
| Field | Type | Collation | Null | Key | Default | Extra | Privileges | Comment |
+-------+------+--------------------+------+-----+---------+-------+---------------------------------+---------+
| test | text | utf8mb4_unicode_ci | NO | | NULL | | select,insert,update,references | |
+-------+------+--------------------+------+-----+---------+-------+---------------------------------+---------+
1 row in set (0.00 sec)
Может кто-то указать мне верное направление?
SET NAMES utf8mb4
перед моимINSERT
. Это единственный способ? - person Danny Kopping   schedule 07.04.2019SET NAMES
— это запасной вариант, который работает, если у вас нет (или вы не используете) параметров соединения. - person Rick James   schedule 16.04.2019