Solución:
character_set_client
, _connection
, y _results
deben ser todos utf8mb4
para que ese pastelito sea comestible.
Algo, en algún lugar, está configurando un subconjunto de esos individualmente. Busque en la configuración de my.cnf y phpmyadmin; algo no está configurando los tres.
Si SET NAMES utf8mb4
se ejecuta, los tres configurados correctamente.
El sol brillaba porque solo tiene 3 bytes – E2 98 80
; utf8 es suficiente para codificaciones utf8 de 3 bytes de caracteres Unicode.
Para mí, resultó que el problema radicaba en el cliente mysql.
actualizaciones del cliente mysql my.cnf
char en un servidor, y resultó en un ajuste de caracteres no deseado.
Entonces, lo que tenía que hacer era agregar character-set-client-handshake = FALSE
. Inhabilita la configuración del cliente para que no altere mi configuración de caracteres.
my.cnf
sería así.
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
...
Espero eso ayude.
Es probable que su servicio / aplicación se conecte con “utf8” en lugar de “utf8mb4” para el juego de caracteres del cliente. Eso depende de la aplicación del cliente.
Para una aplicación PHP, consulte http://php.net/manual/en/function.mysql-set-charset.php o http://php.net/manual/en/mysqli.set-charset.php
Para una aplicación de Python, consulte https://github.com/PyMySQL/PyMySQL#example o http://docs.sqlalchemy.org/en/latest/dialects/mysql.html#mysql-unicode
Además, verifique que sus columnas realmente sean utf8mb4. Una forma directa es así:
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)