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
...
надеюсь, что это помогает.