Connexion base de données externe, problème d'accent

Connexion base de données externe, problème d'accent

par Andrée-Anne Dostie,
Nombre de réponses : 6
Bonjour tout le monde,

J'utilise une base de données externe MySQL pour géré mes comptes étudiants.
J'importe dans Phpmyadmin mes comptes grâce à un fichier cvs sauvegardé en UTF-8. L'importation dans ma base (en utf8) fonctionne très bien.

Si je me log pour la première fois avec un compte sans accent, tout se passe normalement. Mais si le comptes comporte un 'é' ou autres dans ses informations, j'ai cette erreur :

Incorrect string value: '\xE9s' for column 'department' at row 1

INSERT INTO mdl_user ( AUTH, CONFIRMED, MNETHOSTID, USERNAME, FIRSTNAME, LASTNAME, EMAIL, DEPARTMENT, LANG, LASTIP, DESCRIPTION, TIMEMODIFIED ) VALUES ( 'db', 1, 1, 'heff1ati1', 'heff1ati', '1', 'heff1ati1@changer.be', 'Arts appliqu�s', 'fr_utf8', '10.31.122.177', 'Arts du tissu', 1213870775 )
  • line 1554 of lib\dmllib.php: call to debugging()
  • line 2870 of lib\moodlelib.php: call to insert_record()
  • line 3081 of lib\moodlelib.php: call to create_user_record()
  • line 128 of login\index.php: call to authenticate_user_login()

Notice: Trying to get property of non-object in D:\www_moodle\icampus\lib\moodlelib.php on line 3102

Pourtant je suis bien en utf8 partout... et si le problème ne vient pas du format de codage, je vois pas trop où il serait.

Edit : si je crée un compte manuellement dans mySQL comportant des 'é', ça fonctionne... c'est donc mon importation qui semble causer problème...

Auriez-vous des pistes à me proposer ?
D'avance un grand merci.
Moyenne des évaluations  -
En réponse à Andrée-Anne Dostie

Re: Connexion base de données externe, problème d'accent

par Andrée-Anne Dostie,
Bon, visiblement si je met dans moodle que ma base est en latin1 plutôt qu'en UTF8, ça fonctionne...

Visiblement c'est parce que :
le csv créer par macro vba dans excel est en latin1
Le fait de le sauver en utf8 sous notepad ensuite n'y change rien du tout... (même si alors l'importation en utf8 sous phpmyadmin fonctionne).

Donc finalement :
Je laisse le fichier csv tel quel.
J'importe en précisant qu'il s'agit d'un fichier codé en latin1 (car en utf8 il veut pas importer)
Je dis à moodle que ma base est en latin1 (alors que tout est défini en utf8_bin)
Et tout fonctionne, avec ou sans accent...

Je trouve ça légèrement illogique, mais bon ça fonctionne...
En réponse à Andrée-Anne Dostie

Re: Connexion base de données externe, problème d'accent

par Thirot Jean-Luc,
Bonjour,
L'encodage est un processus, il faut faire un dessin (digramme) sinon on oublie vite une étape. Sauf pour les génies qui peuvent enregistrer toutes les étapes dans la tête.

Une recherche typo3 utf-8 peut être très instructives.
En réponse à Andrée-Anne Dostie

Re: Connexion base de données externe, problème d'accent

par Jérôme DEMIAUX,
Avatar Traducteurs
Bonjour,

MicrosoftExcel ne permet pas le choix du type d'encodage des fichiers qu'il produit (autre que les maigres propositions du menu "Enregistrer sous") et le fichier CSV produit est en latin1 avec comme séparateur de champ le ";".

Deux solutions qui font appel toutes les deux à OpenOffice.
  1. La première, se servir d'OpenOffice pour produire le fichier CSV et l'enregistrer directement en UTF-8.
  2. Si cela n'est pas possible, utiliser OpenOffice pour convertir le fichier obtenu.
  • Premier temps importation du fichier (bien penser à cocher ";" comme séparateur),
  • deuxième étape, exportation avec option "Editer les paramètres de filtre" et dans ces options, choisir le jeu de caractères (UTF-8), le séparateur de champ (;) et le séparateur de texte (vide - supprimer tout autre entrée).

Enfin, admirer la beauté et la simplicité du libre.
Jérôme.
En réponse à Jérôme DEMIAUX

Re: Connexion base de données externe, problème d'accent

par Andrée-Anne Dostie,
Bha puisque ça fonctionne en renseignant latin1 sous moodle, je vois pas l'intérêt de me battre pour obtenir un fichier csv en UTF8...
Y'a un risque de bug ou de problème ainsi ?

Et openoffice je connais, mais il est pas compatible VBA et j'ai pas le temps d'apprendre autre chose actuellement (dans l'avenir si j'ai le temps je dis pas non par contre). Donc plutôt que de faire Excel(vba) -> OpenOffice, si je peux l'éviter, je préfère jouer qu'avec un seul logiciel.

Déjà si je connaissait le PHP, j'aurais été direct en PHP lié à ma base MySQL plutôt que de faire Excel ->macro vba pour création des comptes -> macro vba pour csv -> phpmyadmin
Alors venir rajouter openoffice dans la chaîne, si je peux l'éviter je préfères ;)

Pour ce qui est des étapes, je les notes, seulement c'est la première fois que je les fait, donc restait encore à les définir correctement ;)
En réponse à Andrée-Anne Dostie

Re: Connexion base de données externe, problème d'accent

par Jérôme DEMIAUX,
Avatar Traducteurs
... ça fonctionne en renseignant latin1 sous moodle ...
Il n'y a pas de réglage pour cela dans Moodle, mais peut-être par la gestion de la base de données avec phpMyAdmin ??

... Y'a un risque de bug ou de problème ainsi ? ...
Oui, il est bien indiquée dans la documentation que l'encodage UTF-8 est indispensable.

D'autre part, je ne visualise pas les différentes étapes.
A quoi sert Excel ?
D'où sont tirées les données de la feuille Excel servant à générer le fichier CSV ?
A quoi sert cette macro VBA ?

Flute le téléphone, Je reviens plus tard.

Jérôme.
En réponse à Jérôme DEMIAUX

Re: Connexion base de données externe, problème d'accent

par Andrée-Anne Dostie,
... ça fonctionne en renseignant latin1 sous moodle ...
Il n'y a pas de réglage pour cela dans Moodle, mais peut-être par la gestion de la base de données avec phpMyAdmin ??

-> Si si, dans moodle, dans paramètres de ma base de données externes, y'a un champs pour renseigner le type de codage de la BDD où j'ai remplacé UTF8 par latin1

... Y'a un risque de bug ou de problème ainsi ? ...
Oui, il est bien indiquée dans la documentation que l'encodage UTF-8 est indispensable.

-> Et c'est quoi le risque ? Car ça pourtant l'air de très bien marché.
Si le UTF8 est obligatoire, pourquoi alors est-il possible de renseigné le codage de la BDD externe ? c'est pas cohérent...

D'autre part, je ne visualise pas les différentes étapes.
A quoi sert Excel ?
D'où sont tirées les données de la feuille Excel servant à générer le fichier CSV ?
A quoi sert cette macro VBA ?

Alors. J'ai un fichiers excel qui comprend :
  • un tableau renseignant le nombre de compte à créer par catégorie/section/année/classe de l'école
  • Un script VBA excel, en se basant sur le tableau, créé les comptes, mot de passe, info, bref tout ce qu'il faut dans une feuille sous forme 'table bdd'. (Ce qui en fait un bon 3500)
  • Un autre script VBA excell reprend ces infos (qui se trouve dans une feuille excel) et crée un fichier csv (en latin1 visiblement)
  • Acessoirement j'ai un autre script vba pour me sortir des tableaux par catégorie/section/années donnant les infos (compte, pass) pour les enseignants
  • Reaccessoirement, je fais ensuite du publipostage dans word à partir de la feuille excel pour imprimer les feuilles de distribution de compte aux étudiants.
Je passe donc ensuite dans phpmyadmin où :
- J'importe le fichier en lui spécifiant qu'il est codé en latin1
- Ca importe dans la BDD (en utf8), dans la table (en utf8)

Ensuite dans moodle, sous les paramètres de la bdd externe pour l'authentification, je lui dit :
- BDD mysql, nom, compte pour se connecter, etc etc
- Et dans le champ Encodage de la base de données externe je mets latin1

Et tout semble fonctionner. Je me log, les infos sont recopiés dans Moodle et ça fonctionne avec ou sans accent dans les chaînes de caractères...