Convertisseur CSV vers SQL (générateur d'instructions INSERT)
Convertit des fichiers CSV en instructions SQL INSERT et CREATE TABLE. Prend en charge les dialectes MySQL, PostgreSQL et SQLite avec détection automatique du type de colonne (entier, décimal, texte). La conversion s'effectue entièrement dans le navigateur ; aucune donnée n'est envoyée à un serveur.
| Délimiteur |
|
|---|---|
| Utiliser la première ligne comme en-tête | |
| Nom de la table | |
| Dialecte SQL |
|
| Générer aussi l'instruction CREATE TABLE | |
| Traiter les valeurs vides comme NULL | |
| Regrouper les lignes en une seule instruction INSERT |
Saisissez des données CSV pour voir ici le SQL généré.
Correspondance entre une ligne CSV et une instruction INSERT
| Une ligne CSV | name,age,city |
|---|---|
| Instruction INSERT résultante | INSERT INTO `my_table` (`name`, `age`, `city`) VALUES ('Alice', 30, 'Tokyo'); |
Lorsque la première ligne est utilisée comme en-tête, chaque ligne suivante devient une instruction INSERT nommant les colonnes de l'en-tête. Les colonnes détectées comme entier ou décimal sont affichées sous forme de nombres sans guillemets, et les autres colonnes sous forme de chaînes entre guillemets simples.
Astuces
- Le type de chaque colonne (entier, décimal, texte) est déduit automatiquement en examinant toutes les lignes de données de cette colonne. Si ne serait-ce qu'une seule valeur n'est pas numérique, toute la colonne est traitée comme un type texte.
- Activer « Regrouper les lignes en une seule instruction INSERT » génère une seule instruction `INSERT INTO ... VALUES (...), (...), (...);`, ce qui réduit le nombre d'exécutions nécessaires pour charger de grands volumes de données.
- MySQL entoure les identifiants d'accents graves (`), tandis que PostgreSQL et SQLite utilisent des guillemets doubles ("). Le style de guillemets change automatiquement selon le dialecte SQL sélectionné.
- Désactiver « Traiter les valeurs vides comme NULL » fait que les colonnes de texte affichent des chaînes vides ('') et les colonnes numériques affichent NULL à la place.
Questions fréquentes
Anecdote — pourquoi les instructions INSERT regroupées sont plus rapides
L'option de cet outil permettant de « regrouper les lignes en une seule instruction INSERT » (`INSERT INTO t VALUES (1,'a'), (2,'b'), ...;`) peut s'exécuter nettement plus vite que l'émission d'une instruction INSERT par ligne. Cela s'explique par la réduction du coût d'analyse et de planification de chaque instruction SQL, ainsi que du coût des validations de transaction qui, sinon, se répéteraient à chaque instruction.
Cela dit, MySQL impose une limite `max_allowed_packet`, et PostgreSQL a une limite similaire sur son tampon de communication ; entasser trop de lignes dans une seule instruction INSERT peut donc dépasser ces limites et provoquer une erreur. En pratique, diviser les instructions toutes les quelques centaines à quelques milliers de lignes est l'approche courante.
Charger des données CSV dans une base de données de test est souvent appelé « seeding » dans les flux de développement, et de nombreux frameworks web — dont les seeders et factories de Laravel — proposent des mécanismes dédiés précisément à cette tâche. Un convertisseur rapide comme celui-ci reste pratique pour des vérifications à petite échelle ou des migrations de données qui ne justifient pas la mise en place de toute cette infrastructure.