MySQL utf8mb4, błędy przy zapisywaniu Emotikon

Staram się zapisywać nazwy użytkowników z serwisu w mojej bazie danych MySQL. Nazwy te mogą zawierać emotikony typu

Author: Loki, 2016-02-01

3 answers

character_set_client, _connection, i _results musi być utf8mb4 aby to ciastko było do zjedzenia.

Coś, gdzieś, ustawia podzbiór tych pojedynczo. Grzebać w moim.ustawienia cnf i phpmyadmin -- coś nie ustawia wszystkich trzech.

Jeśli SET NAMES utf8mb4 zostanie wykonane, wszystkie trzy zostaną ustawione poprawnie.

Słońce świeciło, ponieważ jest to tylko 3-bajtowe - E2 98 80; utf8 jest wystarczające dla 3-bajtowego kodowania utf8 znaków Unicode.

 50
Author: Rick James,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-03 23:18:47

Jest prawdopodobne, że Twoja usługa / aplikacja łączy się z "utf8 "zamiast" utf8mb4 " dla zestawu znaków klienta. To zależy od aplikacji klienta.

Dla aplikacji PHP Zobacz http://php.net/manual/en/function.mysql-set-charset.php lub http://php.net/manual/en/mysqli.set-charset.php

Dla aplikacji Pythona Zobacz https://github.com/PyMySQL/PyMySQL#example lub http://docs.sqlalchemy.org/en/latest/dialects/mysql.html#mysql-unicode

Sprawdź również, czy Twoje kolumny naprawdę są utf8mb4. Jeden bezpośredni sposób jest taki:

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)
 6
Author: Pierce,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-09 23:17:04

Dla mnie okazało się, że problem leży w kliencie mysql.

Klient Mysql aktualizuje ustawienia znaków my.cnf na serwerze i powoduje niezamierzone ustawienie znaków.

Więc to, co musiałem zrobić, to tylko dodać character-set-client-handshake = FALSE. Wyłącza ustawienie klienta z zakłócania mojego ustawienia znaku.

my.cnf byłoby tak.

[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
...
Mam nadzieję, że to pomoże.
 4
Author: user3624198,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-05 07:34:00