CodeKitHub
Outils JSON

Convertisseur CSV vers SQL

Dernière mise à jour:

Pour transformer une ligne CSV en SQL, chaque colonne devient une valeur dans une instruction INSERT INTO — les nombres restent sans guillemets, le texte est entouré de guillemets simples avec les guillemets internes doublés (O'Brien devient O''Brien), et les cellules vides deviennent NULL. Cet outil applique cette conversion à l'ensemble de votre fichier CSV, entièrement dans votre navigateur, avec le nom de table de votre choix et un échappement correct des chaînes de caractères, si bien que vos feuilles de calcul exportées ou vos exports de base de données ne quittent jamais votre appareil.

En quoi consiste cet outil ?

Alimenter une base de données de test, charger l'export d'une feuille de calcul dans une table, ou migrer un petit jeu de données commence souvent de la même façon : vous avez un fichier CSV et vous avez besoin de SQL. Cet outil analyse votre CSV (en utilisant la ligne d'en-tête comme noms de colonnes) et construit une seule instruction INSERT INTO couvrant toutes les lignes de données, prête à être collée dans un client de base de données.

Les valeurs textuelles sont entourées de guillemets simples, avec les guillemets internes échappés en les doublant (ainsi O'Brien devient O''Brien), la règle d'échappement standard partagée par MySQL, PostgreSQL et SQLite. Une cellule CSV vide est écrite avec le mot-clé SQL NULL plutôt qu'une chaîne vide — c'est un choix délibéré, car une cellule vide dans un tableur signifie généralement « aucune valeur » plutôt qu'« un texte vide », et c'est NULL que la plupart des schémas attendent dans ce cas.

Le fait qu'une valeur soit entourée de guillemets ou non est déterminé par une heuristique simple, pas par une véritable inférence de type : si la cellule, une fois débarrassée des espaces superflus, ressemble à un nombre entier ou décimal (avec éventuellement un signe moins), elle est écrite sans guillemets ; tout le reste — y compris les valeurs qui ressemblent seulement à des nombres mais comportent des caractères supplémentaires, comme des codes postaux avec des zéros en tête — est entouré de guillemets en tant que texte. Cela garde le résultat honnête : c'est un bon point de départ pour un petit import, pas un substitut à la validation de vos données par rapport au schéma réel de votre table avant exécution.

Source : l'analyse CSV suit la RFC 4180, ce qui se rapproche le plus d'une norme CSV formelle ; le doublement des guillemets simples pour l'échappement des chaînes est la convention partagée documentée par MySQL, PostgreSQL et SQLite.

Pourquoi l'utiliser ?

  • Nom de table personnalisable — définissez-le une fois, et chaque ligne cible cette table.
  • Échappement de chaînes correct — les guillemets simples dans les valeurs sont doublés pour que le SQL ne soit ni cassé ni tronqué.
  • Gestion prévisible des NULL — les cellules vides deviennent NULL au lieu d'une chaîne vide, conformément à la façon dont la plupart des bases de données distinguent les données manquantes.
  • Syntaxe SQL courante — le INSERT INTO ... VALUES ... généré ici fonctionne sans modification sur MySQL, PostgreSQL et SQLite.
  • 100 % côté client — vos données CSV (pouvant inclure des données clients ou d'entreprise) sont analysées et converties dans votre navigateur et ne sont jamais téléchargées où que ce soit.

Mode d'emploi

  1. Collez des données CSV avec une ligne d'en-tête, par ex. name,age\nAlice,30\nBob,25.
  2. Saisissez le nom de la table cible (par défaut my_table).
  3. Cliquez sur « Générer le SQL ».
  4. Copiez l'instruction INSERT INTO ou téléchargez-la sous forme de fichier .sql, puis exécutez-la sur votre base de données.

Exemple

Entrée

name,age,city
Alice,30,
Bob,,NYC

Résultat

INSERT INTO `my_table` (`name`, `age`, `city`)
VALUES
  ('Alice', 30, NULL),
  ('Bob', NULL, 'NYC');

Remarquez que les cellules vides sont devenues NULL (et non des chaînes vides), et que la valeur numérique age (30) est restée sans guillemets tandis que chaque valeur textuelle a été entourée de guillemets.

Conseils pratiques

  • Alimenter une base de données de test locale : exportez un petit échantillon en CSV depuis un tableur, convertissez-le ici, et exécutez l'instruction INSERT sur votre base de données de développement.
  • Vérifiez toujours les types de colonnes avant d'exécuter le SQL généré sur une table réelle — cet outil déduit le numérique du texte avec une heuristique simple, pas selon votre schéma réel, si bien qu'une colonne entière attendant un format spécifique peut nécessiter un ajustement manuel.
  • Si vous avez des milliers de lignes, l'unique instruction INSERT multi-lignes générée par cet outil reste du SQL valide, mais des instructions très volumineuses peuvent dépasser la taille maximale de paquet d'une base de données — divisez d'abord le CSV en lots plus petits si vous rencontrez cette limite.

Pourquoi NULL et non une chaîne vide

Une erreur courante lors de l'écriture manuelle de scripts CSV vers SQL est de traiter chaque cellule manquante comme une chaîne vide ''. C'est techniquement du SQL valide, mais cela ne signifie généralement pas ce que vous souhaitez : une colonne définie en entier rejettera catégoriquement '', et même dans une colonne texte, '' signifie silencieusement quelque chose de différent de « nous ne connaissons pas cette valeur » dans la plupart des conceptions de schémas et des requêtes de reporting (une vérification WHERE colonne IS NULL ne correspondra pas aux chaînes vides, et inversement). Utiliser NULL pour les cellules vides correspond à la sémantique attendue par la plupart des bases de données et des ORM, et évite des erreurs de type lorsqu'une colonne numérique comporte des valeurs manquantes sur certaines lignes.

Foire aux questions

Cela fonctionne-t-il avec toutes les bases de données SQL ?

La syntaxe générée — identifiants entre backticks, valeurs textuelles entre guillemets simples, INSERT INTO ... VALUES ... standard — est courante à MySQL, PostgreSQL et SQLite. PostgreSQL n'exige pas strictement des backticks autour des identifiants (il utilise des guillemets doubles si un entourage est nécessaire), mais des noms entre backticks n'y posent pas non plus de problème, sauf si vous avez des noms de colonnes inhabituels entrant en conflit avec des mots réservés. Aucune norme SQL officielle unique n'est suivie ici — juste la syntaxe qui fonctionne sans modification sur les bases de données les plus courantes.

Pourquoi une cellule vide devient-elle NULL plutôt qu'une chaîne vide '' ?

C'est un choix de conception délibéré : dans la plupart des exports CSV réels, une cellule vide signifie que la valeur est inconnue ou non applicable, et non littéralement un texte vide. C'est NULL que la plupart des schémas de bases de données attendent dans ce cas. Si votre cas d'usage a réellement besoin de chaînes vides, vous devrez modifier le SQL généré à la main pour ces cas.

Comment l'outil décide-t-il si une valeur nécessite des guillemets ?

C'est une heuristique simple, pas une véritable inférence de type : si une cellule, débarrassée des espaces superflus, ne contient que des chiffres (avec éventuellement un signe moins en tête et au maximum un point décimal), elle est écrite sans guillemets en tant que nombre. Tout le reste est entouré de guillemets en tant que texte. Cela signifie qu'un code postal comme 00501 ou un numéro de téléphone ne serait traité comme du texte que s'il comporte des caractères supplémentaires — un zéro initial seul est encore analysé comme numérique ici, donc vérifiez bien les identifiants comme les codes postaux et les ID avant d'exécuter le SQL.

Mes données sont-elles téléchargées quelque part ?

Non. L'analyse et la génération du SQL se font toutes deux en JavaScript dans votre navigateur — rien n'est envoyé à un serveur, ce qui rend son utilisation sûre avec des enregistrements clients ou d'entreprise exportés.

Peut-il gérer des valeurs CSV contenant des virgules ou des guillemets ?

Oui. Le CSV est analysé avec un analyseur de champs entre guillemets adapté, qui comprend les virgules, les sauts de ligne et les guillemets doublés à l'intérieur des champs entre guillemets — pas une simple séparation sur les virgules — si bien qu'un champ comme « Smith, John » est lu comme une seule valeur, et non scindé en deux colonnes.

Outils associés