23 Apr 2024 
Centre d'assistance » Base de connaissances » UTF8mb4 : changement de codage des caractères dans MySQL
 Connexion [Mot de passe perdu] 
Courriel:
Mot de passe:
Se souvenir de moi:
 
 Recherche
 Détails des articles
 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 &#x1f606 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:

Logiciel d'assistance informatique produit par Kayako SupportSuite v3.10.02