Erreur d'enregistrement contenu HTML avec emoticon

j’ai créé un attribut de type contenu html (longueur 10000) pour saisir des commentaires d’instruction.
Si je saisi du texte => l’enregistrement fonctionne
Si j’ajoute un emoticon => enregistrement KO

erreur dans les logs :
update CRB_PCA_DEMANDE set updated_dt=?,updated_by=?,PCA_DOSSIER_INST_CC_COM=? where row_id=?
com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Incorrect string value: ‘\xF0\x9F\xA5\xBA</…’ for column ‘PCA_DOSSIER_INST_CC_COM’ at row 1

image

Le pb est au niveau de la base de données.

Pour pouvoir enregistrer ce type de caractères il faut visiblement que la base soit en encoding utf8mb4:

MySQL [simplicite]> show variables like 'char%';
+--------------------------+--------------------------------+
| Variable_name            | Value                          |
+--------------------------+--------------------------------+
| character_set_client     | utf8mb3                        |
| character_set_connection | utf8mb3                        |
| character_set_database   | utf8mb4                        |
| character_set_filesystem | binary                         |
| character_set_results    | utf8mb3                        |
| character_set_server     | utf8mb4                        |
| character_set_system     | utf8mb3                        |
| character_sets_dir       | /usr/share/mysql-8.0/charsets/ |
+--------------------------+--------------------------------+
8 rows in set (0.003 sec)

ET que la table en question soit altérée pour utiliser aussi cet encoding, ex:

ALTER TABLE m_system CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Et là ça enregistre bien ces caractères spéciaux:
image

Ma config de test:

[Platform]
Status=OK
Version=5.3.1
BuiltOn=2023-05-02 11:54
(...)

[JavaVM]
Version=17.0.7
Vendor=Eclipse Adoptium
VMName=OpenJDK 64-Bit Server VM
VMVersion=17.0.7+7
(...)

[Database]
Vendor=2
ProductName=MySQL
ProductVersion=8.0.33
(...)

cf. How to store Emoji Character in MySQL Database - Stack Overflow

PS:

A partir de la 5.3.3, les déploiements initiaux sur MySQL se feront par défaut en utf8mb4 sur l’ensemble des tables (celles existantes out of the box et celles crées ultérieurement via le paramétrage)

Pour les instances existantes il faut faire les alter indiqués sur les tables concernées

1 Like

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.