MySQL utf8mb4, ошибки при сохранении смайликов


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

3   51   2016-02-01 11:27:07

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 my.cnf ' s char настройки на сервере, и в результате непреднамеренной настройки символов.

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

my.cnf будет.

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

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