MySQL utf8mb4, ошибки при сохранении Emojis

Я пытаюсь сохранить имена пользователей из службы в моей базе данных MySQL. Эти имена могут содержать смайлики, такие как

3 ответов


character_set_client, _connection и _results все должно быть utf8mb4 чтобы этот торт был съедобным.

что-то, где-то, устанавливает подмножество из них индивидуально. Поройся в моей.настройки cnf и phpmyadmin - что-то не устанавливает все три.

если SET NAMES utf8mb4 выполнена, все три установлены правильно.

солнце светило, потому что это только 3 байта -E2 98 80; utf8 достаточно для 3-байтовых кодировок символов Юникода utf8.


вероятно, что ваша служба/приложение подключается к" utf8 "вместо" utf8mb4 " для набора символов клиента. Это зависит от клиентского приложения.

для приложения PHP см. http://php.net/manual/en/function.mysql-set-charset.php или http://php.net/manual/en/mysqli.set-charset.php

для приложения Python см. https://github.com/PyMySQL/PyMySQL#example или http://docs.sqlalchemy.org/en/latest/dialects/mysql.html#mysql-unicode

кроме того, проверьте, что ваши колонки действительно utf8mb4. Один прямой путь таков:

mysql> SELECT character_set_name FROM information_schema.`COLUMNS`  WHERE table_name = "user"   AND column_name = "displayname";
+--------------------+
| character_set_name |
+--------------------+
| utf8mb4            |
+--------------------+
1 row in set (0.00 sec)

для меня оказалось, что проблема заключалась в клиенте mysql.

обновления клиента mysql 's char на сервере и привел к непреднамеренной настройке символов.

Итак, что мне нужно сделать, это просто добавить character-set-client-handshake = FALSE. Он отключает настройку клиента от нарушения настройки char.

my.cnf будет.

[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
...

надеюсь, что это помогает.