Aller au contenu

Problème d'encodage lors d'une migration MARIADB


Messages recommandés

Bonjour,

j'ai un vieux serveur avec XAMPP et l'application PHP ProjeQtor installée dessus. Après un audit de sécurité j'ai besoin de mettre à jour toute la stack applicative et je rencontre des difficultés pour mariaDB.

J'ai décrit tout mon problème dans un post en anglais sur un autre forum, et je m'octroie le droit de simplement faire un lien plutot que tout retranscrire. 

https://www.projeqtor.org/fr/kunena/5-ask-questions/13474-encoding-errors-after-mariadb-upgrade

Je suis preneur de toute aide que vous pourriez m'apporter ! 

Merci d'avance la commu

 

Lien vers le commentaire
Partager sur d’autres sites

Il y a 4 heures, Bamaury a dit :

J'ai décrit tout mon problème dans un post en anglais sur un autre forum, et je m'octroie le droit de simplement faire un lien plutot que tout retranscrire. 

Les problèmes d'encodage sont complexes à diagnostiquer, car la règle dans ce domaine c'est: "tout le monde ment".

Chaque logiciel va en effet décoder à sa façon, la seule qui compte, c'est celle du logiciel final.

Et là, j'ai du mal à savoir où est ton problème, il faut que tu nous dises dans quelles conditions tu constates un problème d'encodage

  • dans l'affichage web de ton appli
  • dans la BDD de ton appli via un outil
  • dans un fichier d'export
  • ...

Si c'est l'affichage web: attention, peut-être ton appli n'est-elle pas dans le bon charset: il faut qu'elle le spécifie (il y a encore des applis non UTF8), sinon c'est le navigateur qui y va à la devinette...

Si c'est déjà dans la BDD: à voir lequel serait cohérent avec ton affichage web. Le mieux: ajouter une entrée dans ton appli web, avec tous les caractères problématiques que tu connais, et la retrouver dans la BDD. Ca peut aider à diagnostiquer ... en se rappelant que ce que tu vois n'est pas ce qui est dans la BDD, mais la façon dont ton outil l'interprète!!!

Bref, il nous faut une illustration.

Lien vers le commentaire
Partager sur d’autres sites

Dans la BDD actuelle, j'ai des soucis d'encodage quand je me connecte avec DBEAVER ou phpmyadmin. Sauf si avant de requeter, je fais un SET NAMES avec le bon charset. Par contre l'appli de prod affiche correctement les valeurs dans le navigateur.

 

Sur mon nouvel environnement, mêmes symptômes dans la BDD, mais j'ai aussi les pb d'encodage dans le navigateur.

Les différences d'installations sont expliquées dans le post que j'ai lié, mais je me suis peut etre mal exprimé en anglais.

 

 

 

 

Lien vers le commentaire
Partager sur d’autres sites

Pour résumer:

  • Ton appli de prod, ancien environnement, fonctionne
  • Mais tu n'es pas tout à fait satisfait car DBeaver et phpmyadmin n'affiche pas correctement les données
  • Ton appli migrée a les mêmes soucis d'encdage dans la base ET à l'affichage

Lors de la migration

  • Au départ, ton appli était en utf8mb4
  • Tu as forcé l'encodage en latin1 lors de l'export
  • (L'export dans notepad++ est lisible en UTF8)
  • Tu as importé...
  • Pour voir les données correctement dans DBeaver et phpmyadmin tu dois mettre 'latin1'
  • Mais dans la base de prod ça ne fonctionne pas

Question:

Comment importes-tu exactement (avec quel outil)? N'y a -t'il pas un risque d'avoir un micmac lors de l'import lié à une réinterprétation du fichier par l'outil?

Pourquoi vouloir changer l'encodage? UTF8 c'est pas mal et ça marche dans l'appli...

Es-tu sûr que l'encodage n'est pas forcé dans la chaîne de connection de l'appli?

Es-tu sûr qu'il n'y a pas de changement d'encodage au niveau de chaque table? N'as-tu pas un paramètre au niveau PHP, ou DBeaver?

 

 

Lien vers le commentaire
Partager sur d’autres sites

Comment importes-tu exactement (avec quel outil)? N'y a -t'il pas un risque d'avoir un micmac lors de l'import lié à une réinterprétation du fichier par l'outil?

---> avec l'outil DBEAVER à l'import ou l'export. Je ne sais pas trop t'en dire plus

Pourquoi vouloir changer l'encodage? UTF8 c'est pas mal et ça marche dans l'appli...

---> le serveur de base de données source est en latin1, je pensais que la base était aussi en latin1, mais à la dernière vérification non. les tables ont un encodage qui varie entre utf8 et utf8mb4

Es-tu sûr que l'encodage n'est pas forcé dans la chaîne de connection de l'appli?

---> sûr, jamais, je ne maitrise pas trop ce logiciel. Mais dans l'encodage est indiqué dans le code comme étant en utf8. 

if (self::$dbType == "mysql" and isset($enforceUTF8) and $enforceUTF8) {
        self::$connexion->query("SET NAMES utf8mb4");
      }

Es-tu sûr qu'il n'y a pas de changement d'encodage au niveau de chaque table? N'as-tu pas un paramètre au niveau PHP, ou DBeaver?

--> si, mais jamais en latin1, comme indiqué plus haut, parfois juste utf8, parfois utf8mb4

Lien vers le commentaire
Partager sur d’autres sites

Bon, voici comment je procèderais:

  • Vu que la base d'origine est UTF8, je ne toucherais à rien
  • Par contre je testerais de me connecter à la base d'origine en forçant la UTF8mb4 dans la connexion string de DBeaver (UTF8mb4 contient tout UTF8, c'est compatible dans ce sens)
  • Je réaliserais le dump SANS RIEN spécifier niveau encodage
  • Je réaliserais l'import SANS RIEN spécifier niveau encodage depuis le MEME ordi
  • Et ensuite je vérifierais le fonctionnement
  • Et je jouerais sur les connectionstring pour forcer l'encodage

Je précise que je n'utilise pas mysql (pour une raison citée plus tard). La règle en général, c'es tde faire confiance aux outils, et d'utiliser le même système pour faire le dump et le restore. Le dump de mysql est un dump texte, c'est beau, mais c'est aussi totalement soumis aux outils de lecture et de transfert de fichier comme à l'OS. Donc il faut éviter de changer un seul paramètre -> l'OS qui écrit le fichier de dump est celui qui le lit. Je n'utilise pas mysql à cause d'un problème que j'ai dû traiter: un dump mysql qui m'a posé beaucoup de problèmes lors d'un transfert Linux -> Linux (la BDD contenant des caractères spéciaux entrés sous windows)... Quand on n'a pas la config d'origine et un fichier énorme...

Lien vers le commentaire
Partager sur d’autres sites

abandon temporaire de mon côté.
J'ai installé une mariadb 10.1.48 au lieu d'une 10.3 , ça résoud instantément mes soucis d'encodage. Le responsable sécurité m'a dit que dans un premier temps ça ira.
Ensuite je verrai comment je peux mettre à jour l'image docker sans souci.

 

Merci pour l'aide

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...