22 Apr 2025
Centre d'assistance
»
Base de connaissances
»
Support Technique
»
Anciennes versions
»
UTF8mb4 : changement de codage des caractères dans MySQL
Connexion
[Mot de passe perdu]
Courriel:
Mot de passe:
Se souvenir de moi:
Recherche
-- Site d'assistance complet --
Base de connaissances
Formation par webinaires
Détails des articles
Imprimer l'article
Ajouter aux Favoris
UTF8mb4 : changement de codage des caractères dans MySQL
Solution
IceWarp v12
-
Pourquoi changer le codage des caractères
Le journal des erreurs d'IceWarp peut vous donner des erreurs de ce type :
SYSTEM [49E8] 04:53:30:688 DB lib Error executing query: Incorrect string value: '\xF0\x9F\x94\xA8' for column 'SndSubject' at row 1, SQL: INSERT INTO Senders (SndEmail, SndAuthorized, SndCreatedOn, SndCreatedAt, SndFolder, SndOwner, SndDomain, SndIP, SndWord, SndSubject) VALUES ...
Cela se produit en particulier lorsque les utilisateurs introduisent des émoticônes ou emojis dans les messages, les événements, les contacts... Ceux-ci sont en effet codés sur 4 octets.
Vous devez alors envisager de modifier le codage des caractères des bases MySQL
Le codage UTF8 de MySQL n'implémente en effet que partiellement la norme UTF8
La norme UTF8 permet de coder les caractères sur 4 octets alors que UTF8 de MySQL ne peut les coder que sur 3 octets
Depuis la version 5.5.3, MySQL permet le codage sur 4 octets mais le codage doit être modifié en UTF8mb4 à la place de UTF8
Pour plus de détails, vous pouvez consulter :
https://mathiasbynens.be/notes/mysql-utf8mb4
Comment changer le codage des caractères sur le serveur IceWarp
Il existe une méthode par un script linux donné dans le lien suivant :
https://esupport.icewarp.com/index.php?/Knowledgebase/Article/View/583/0/convert-iw-dbs-to-specific-character-set
Nous développerons cependant une autre méthode utilisant la migration des bases de données
Il faut commencer par migrer toutes les bases de données puis modifier une variable du serveur pour que celui-ci prenne en compte la modification.
Préalable à la migration
1- Noter qu'il est important pour des raisons de sécurité, de vérifier que des sauvegardes existent, bien que la procédure ne modifie pas les bases existantes
2 - Vérifier que MySQL est au moins en version 5.5.3 et le serveur IceWarp en 12.0.2 minimum
3 - Faire l'opération de migration à une heure où le trafic est faible, certaines migrations pouvant être longues
4 - Il n'est pas utile de modifier les bases qui sont en SQLite (notamment le cache du client web)
5 - Avec MySQL, la taille des clés est limitée et en cas de dépassement on peut obtenir l'erreur :
"
Error executing query: Specified key was too long; max key length is 767 bytes
"
767 bytes correspond à 255 caractères en UTF8 et 191 en UTF8mb4
Il faut donc vérifier que les champs qui sont des clés ne dépassent pas 191 caractères.
Dans la table calendar\calendar.xml qui définit les tables du GroupWare, il faut modifier les champs qui sont des
clés et
qui font
255
caractères.
Voici la liste pour 12.1 :
Line 58: TP_ID %%varchar%%(191),
Line 69: TPSTP_ID %%varchar%%(191),
Line 224: REA_FOLDER %%varchar%%(191),
Line 240: MEN_FOLDER %%varchar%%(191),
Line 259: PIN_FOLDER %%varchar%%(191),
Line 276: PIN_FOLDER %%varchar%%(191),
Line 293: COM_FOLDER %%varchar%%(191),
NB : le numéro de ligne peut évoluer avec les versions
6 - Rappel, les bases de données du serveur, sont :
- Comptes
- Anti-Spam
- GroupWare
- Cache répertoire
- WebClient
- ActiveSync
- Rapports de spam
Procédure de migration
A - Pour chaque base de données à migrer, effectuer les actions suivantes :
1) Créer une nouvelle base de données MySQL avec le jeu de caractères
utf8mb4
et la collation :
utf8mb4_unicode_ci
2) Aller dans Outils -> Migration bases de données de la console d'administration
3) Sélectionner la base de données
4) Sélectionner BD source... qui se positionne automatiquement sur la base en cours
5) Sélectionner BD destinations... et rentrer les caractéristiques de la nouvelle base utf8mb4
6) Cliquer sur réparer les caractères UTF-8
7) Cliquer sur "Démarrer..."
Si le journal ne donne pas d'erreur, il faut ensuite accepter le basculement de la base de données
Si des erreurs sont présentes, essayer de les corriger et recommencer la procédure en 3)
Le journal des erreurs est accessible dans le répertoire logs\migration\ (voir l'emplacement dans Système -> Stockage -> Dossiers)
les erreurs sur la longueur des champs de la table GroupWare peuvent être corrigées en modifiant le fichier \calendar\calendar.xml
B - Une fois les bases converties, il faut modifier une variables API de la façon suivante
Sur la console d'administration, aller sur Fichier -> Console API...
Rentrer
mysqldefaultcharset
dans le filtre
Modifier la valeur de cette variable en
utf8mb4
C - Redémarrer tous les services
Insertion d'Emojis
La messagerie IceWarp ne prévoit pas pour l'instant l'insertion des EMojis mais il est possible de les ajouter dans le code HTML
Il faut rechercher le codage de l'emojis (https://apps.timwhitlock.info/emoji/tables/unicode) puis mettre les caractères hexadécimaux précédés de &#x
par exemple 😆 va afficher un 😆.
Mise à jour le 10 juillet 2018
Détails des articles
Code d'identification de l'article:
402
Créé le:
07 Nov 2017 12:06 PM
Cette réponse m'a été utile
Cette réponse ne m'a pas été utile
Accueil
|
Enregistrement
|
Créer ticket
|
Base de connaissances
|
Formation par webinaires
Langue:
French
English (U.S.)
Logiciel d'assistance informatique produit par Kayako SupportSuite v3.10.02