Bonjour à tous,
J’ai eu l’occasion d’échanger en MP avec certains d’entre vous concernant l’ajout d’emojis dans jeedom, qui chez certains ne posent pas de problème, et chez d’autres génèrent de gros messages d’erreur SQL « rouge » et fait planter l’action en cours ![]()
La raison principale :
- L’encodage de la base de données et de ses tables / colonnes, qui est encore pour certains en UTF8 (et on veut aujourd’hui du UTF8MB4). Or ce format n’accepte pas les caractères codés sur 4 bytes

Vous allez me dire, c’est quoi le rapport avec les emojis
et bien sans rentrer dans les détails, les emojis sont stockés justement dans ce format « 4 bytes » en base, et si celle-ci n’accepte pas ce format, cela provoque les fameux gros messages d’erreurs SQL ![]()
Qui est concerné ?
- Pas besoin que votre installation Jeedom soit « ancienne » = Même à jour ou réinstallée récemment, si vous restaurez la base via un backup par exemple, cela suffit à faire revenir ce format UTF8 (alors qu’on veut toujours du UTF8MB4
) - La première partie du tuto permet justement de vérifier si on est impacté ou non

Je vous propose donc le tuto suivant, pour convertir votre base et les tables / colonnes correspondantes en UTF8MB4 ![]()
1 - Par mesure de précaution
Déjà (toujours important avant de toucher à son jeedom) :
- Faire un backup de Jeedom
- Et l’exporter en dehors du Jeedom (au cas où, on est jamais trop prudent et c’est de toute manière une bonne pratique)
2 - Convertir la BDD et les tables en UTF8MB4
Dans l’absolu, les bonnes pratiques vous dirait qu’il faut faire cela connecté en SSH sur Jeedom, Jeedom arrêté, et en ligne de commande.
Personnellement, même avec une base qui dépasse 1Go, j’ai tout fait à partir de l’interface de Jeedom.
Je me suis juste assuré de ne pas lancer les commandes à une minute exacte
- Donc pas à 19h15m00s, mais à 19h15m20s par exemple = pour m’assurer qu’il n’y a pas un CRON 1 min qui s’exécute au moment où je fais les modifs dans la base

Donc dans l’interface de Jeedom :
- Aller, via les menus, dans l’interface de gestion de la base de données :
- Menus : Réglages / Système / Configuration,
- Puis tout au bout : OS/DB, et dans la page, je choisis Administration Base de données : « Ouvrir »

Ensuite, pour toutes les commandes ci-dessous qui sont proposées, je les copie/colle dans le champ « Commande SQL » et j’utilise le bouton « Exécuter » pour les lancer :
![]()
Les vérifications :
Et donc, dans un premier temps, les vérifications :
- Pour vérifier l’encodage de la base de données, des tables, et des colonnes, pour voir ce qui est déjà en UTF8MB4 ou pas :
La base de données en elle-même :
SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME
FROM information_schema.SCHEMATA
WHERE SCHEMA_NAME = 'jeedom';
Tables qui ne sont pas encore en utf8mb4 :
SELECT TABLE_NAME, TABLE_COLLATION
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'jeedom'
AND TABLE_COLLATION NOT LIKE 'utf8mb4%';
Colonnes qui ne sont pas encore en utf8mb4 :
SELECT TABLE_NAME, COLUMN_NAME, CHARACTER_SET_NAME, COLLATION_NAME
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'jeedom'
AND CHARACTER_SET_NAME IS NOT NULL
AND CHARACTER_SET_NAME != 'utf8mb4';
Ensuite, en fonction de ce qui sera retourné dans les différentes commandes ci-dessus :
Convertir la base de données en UTF8MB4
SI (et seulement SI) la base n’est pas au format utf8mb4 (moi elle l’était déjà par exemple, seules certaines tables de ne l’étaient pas) :
PS : dont pour être tout à fait clair : si la base est déjà en UTF8MB4, pas besoin de lancer la commande ci-dessous, on passe directement à la suite un peu plus bas ![]()
Convertir la BDD en UTF8MB4 :
ALTER DATABASE jeedom
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
Convertir les tables et les colonnes en UTF8MB4
Ensuite, on va convertir les TABLES et les colonnes qui ne sont pas déjà en utf8mb4.
Pour cela, on commence par lancer la commande suivante qui va GENERER une autre commande de type « ALTER TABLE » dynamiquement pour VOTRE système (en gros le résultat n’est valable que sur UN SEUL jeedom, et s’il y en as plusieurs à la maison, il faudra relancer cette commande sur chaque jeedom pour qu’il génère dynamiquement la bonne commande) :
SELECT CONCAT(
'ALTER TABLE `', TABLE_NAME,
'` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;'
)
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'jeedom'
AND TABLE_TYPE = 'BASE TABLE';
Ensuite, il faut copier (sélectionner avec votre souris) le résultat et coller l’ensemble dans le champ « Commande SQL » et l’executer (attention à ne pas prendre la première ligne qui est une « entête » / un rappel de ce que cela génère, mais il faut prendre seulement toutes les lignes où il y a marqué « ALTER TABLE […] »)
C’est cette commande « CONVERT TO » qui va convertir le contenu des tables et des colonnes.
En fonction de la taille de la base de données, cela peut prendre plusieurs secondes, voir quelques dizaines de secondes, pas d’inquiétude donc si c’est pas immédiat le résultat
On attend sagement que cela se termine
et en attendant on clique pas partout ![]()
Vérifier que tout est bien converti
Enfin, il faut vérifier que tout est bien converti, en lancant cette commande de vérification :
Tout doit être au format « utf8mb4 » :
SELECT TABLE_NAME, TABLE_COLLATION
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'jeedom'
AND TABLE_COLLATION NOT LIKE 'utf8mb4%';
Le résultat doit donc être VIDE ! (retourner 0 ligne)
Et après, j’ai rebooté chaque jeedom proprement pour être sûr, et à partir de là, il est possible d’utiliser des emojis un peu partout (équipement, scénarios, dashboard, design, etc..) ![]()
Bonne journée à tous,
TiTidom.
