Comment importer un fichier csv, excel dans une base de donnée MySQL : conseils et méthodologie

Dans mon travail, je suis souvent confronté à devoir importer un fichier excel ou CSV dans une table Sql . Cette tâche qui a l’air simple de prime abord peut vite devenir un vrai cauchemar si les données importées sont trop grandes ou que le format d’encodage n’est pas correcte ou bien alors les données ne sont pas clairement définis… Quand on doit importer d’énormes database pour Eni, Bpost ou des données pour une campagne mailing de 60.000 prospects on a pas le droit à l’erreur !

Voici quelques conseils et ma méthodologie pour importer proprement cela.

  1. Essayer de se mettre d’accord dès le départ d’une convention et d’entêtes de colonnes :  normalisation et conventions sont les maîtres-mots pour assurer une bonne productivité. Mettez-vous d’accord dès le début des noms des différentes colonnes ainsi que de l’ordre de ceux-ci. En gardant les mêmes noms durant tout le flow, vous vous assurerez que les données seront clairement définis et compréhensible à la fois pour le client, le project manager et le dévelopeur. Je vois encore trop souvent des projets stupidement ralentis parce qu’un fichier csv n’est pas dans le même ordre que dans la DB ou qu’un fichier excel comporte des noms d’entêtes mal choisies… Voici quelques bonnes pratiques à adopter :
    • Définir une colonne id unique : cela peut paraitre stupide mais avoir un identifiant unique simplifie la vie de tout le monde. En effet, cela permet d’identifier un enregistrement dans une table et de, par example, pouvoir mettre à jour ou d’ajouter rapidement juste quelques lignes de records plutôt que de devoir faire tout un Import. Cela peut être juste simplement une colonne avec des chiffres incrémentés => de cette manière il sera plus facile d’identifier le record même si on change l’ordre de tri dans un tableau
    • Standardisé le nom des des colonnes et les mettre si possible en anglais : dans une base de donnée MySql il faut éviter les espaces, accents et les mots reservés essayez donc de faire de même dans un fichier excel ou CSV. Optez toujours pour des noms de colonnes simples, courts et compréhensible par tout le monde. Une colonne qui se nomme CUID est moins compréhensible que id_customer par example ou à contrario l’appeler « Identité du client » ne pourra jamais être utilisé comme tel dans une base de donnée MySQL ou compréhensible par un développeur qui ne serait pas Français. Le mieux c’est toujours de demander au développeur ce qu’il a besoin, parfois certains champs sont inutiles ou une autre structure est possible, ce qui peut vraiment alléger les données lors de l’import
    • Ordonner les noms de colonnes par ordre d’importance et d’utilité : cela peut paraitre bête mais devoir scroller horizontalement pour avoir des données importantes peut faire perdre un temps dingue à tout le monde. Ce que je suggère toujours c’est de mettre si possible en premier l’email, puis les informations importantes comme le nom, prénom, sexe, adresse et puis les champs moins important comme la date de création à la fin => comme ça vous avez une vue d’ensemble des données sans être parasité par des données non pertinentes pour vous
  2. Choisir le bon format et le bon logiciel : le choix du format est d’une importance capitale lors de l’export d’une database => privilégiez  toujours si possible le format UTF-8 pour éviter les problèmes de compatibilité Mac/PC lors de l’import. Le choix du logiciel est aussi très important. Privilégiez des outils collaboratifs en ligne tel que Google Docs pour centraliser vos données => cela évitera les problèmes liés à des versions non à jour et d’assurer que tout le monde ait la dernière version avec une possibilité d’historique en cas de mise à jour etc. Si possible évitez Excel et ces codes macros, préférez plutôt Google docs ou open office même si vous travaillez sur Excel, simplement copier-coller les données dans un tableau Google Doc ou Open Office règle très souvent les problèmes d’encodage de caractère qui peut se retrouver avec Excel…
  3. Exporter au format CSV UTF-8 (.csv) avec comme première ligne le nom des colonnes ou Open Document (.ods) : quand vous devez importer une grosse database, le mieux c’est d’importer un csv au format UTF8 via LOAD-DATA plutôt qu’Excel car cela requiert plus de mémoire et de ressources de devoir interpreté le code au format Excel propriétaire à Microsoft. Le format ODS est un format très sympa car il à l’avantage d’être ouvrable dans Excel, Open office ou google docs et PhpMyAdmin et que le code est plus léger qu’un fichier Excel et gère bien le problème des accents.
  4. TOUJOURS faire un backup des données et importer sur une DB test : je conseille toujours très fortement de faire des tests sur un environnement dev ou une table factice plutôt que directment sur la base de donnée de production en ligne – les conséquences si l’import ne s’est pas bien déroulée peuvent être vraiment catastrophiques !! Qui plus est, l’installer sur un serveur test, peut permettre, par example de pouvoir modifier les limites d’importations (si vous n’avez pas accès au php.ini) ou de modifier la structure de la table. Il vaut mieux en effet créer la structure dans PhpMyadmin ou Workbench plutôt que de la créer à partir d’un import excel car la limite d’une colonne sera définie par le plus grand nombre de lettre de la colonne (donc attention !!!!) => Ayez toujours donc ce reflex qui peut-être salvateur.
  5. VERIFIER vos données d’importations et la structure de la table : parfois lors d’un mauvais import, il arrive que des caractères disparaissent ou que tout un record ait disparu parce qu’un caractère n’est pas passé. Aussi, je ne peux que conseiller de sur-vérifier que le nombre de records corresponds et que tous les caractères sont bien passées et correspondent bien. Aussi, n’hésitez pas aussi à rajouter un record avec le nom des champs pour vérifier qu’ils sont à la bonne place et de le supprimer ensuite une vois que c’est vérifier.

Voilà mes conseils, n’hésitez pas à partager les votres ou à faire des remarques dans la partie commentaires 😉

Drop a comment

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.