Che cos'è questo strumento?
Popolare un database di test, caricare l'esportazione di un foglio di calcolo in una tabella, o migrare un piccolo set di dati inizia spesso allo stesso modo: hai un file CSV e ti serve SQL. Questo strumento analizza il tuo CSV (usando la riga di intestazione come nomi di colonna) e costruisce un'unica istruzione INSERT INTO che copre tutte le righe di dati, pronta da incollare in un client di database.
I valori testuali vengono racchiusi tra apici singoli, con gli apici interni sottoposti a escape raddoppiandoli (così O'Brien diventa O''Brien), la regola di escape standard condivisa da MySQL, PostgreSQL e SQLite. Una cella CSV vuota viene scritta come la parola chiave SQL NULL anziché come stringa vuota — è una scelta deliberata, poiché una cella vuota in un foglio di calcolo di solito significa "nessun valore" e non "un testo vuoto", ed è NULL ciò che la maggior parte degli schemi si aspetta per questo caso.
Se un valore viene racchiuso tra virgolette o meno viene deciso da un'euristica semplice, non da una vera inferenza di tipo: se la cella, ripulita dagli spazi ai bordi, sembra un numero intero o decimale puro (eventualmente con un segno meno iniziale), viene scritta senza virgolette; tutto il resto — inclusi i valori che assomigliano solo a numeri ma contengono caratteri aggiuntivi, come codici postali con zeri iniziali — viene racchiuso tra virgolette come testo. Questo mantiene onesto il risultato: è un buon punto di partenza per un'importazione di piccole dimensioni, non un sostituto della verifica dei dati rispetto allo schema reale della tabella prima dell'esecuzione.
Fonte: l'analisi CSV segue la RFC 4180, la cosa più vicina a uno standard CSV formale; il raddoppio degli apici singoli per l'escape delle stringhe è la convenzione condivisa documentata da MySQL, PostgreSQL e SQLite.
Perché usarlo?
- Nome tabella personalizzabile — impostalo una volta, e ogni riga farà riferimento a quella tabella.
- Escaping delle stringhe corretto — gli apici singoli all'interno dei valori vengono raddoppiati in modo che l'SQL non si rompa né venga troncato.
- Gestione prevedibile di NULL — le celle vuote diventano NULL invece di una stringa vuota, in linea con il modo in cui la maggior parte dei database distingue i dati mancanti.
- Sintassi SQL comune — l'INSERT INTO ... VALUES ... generato qui funziona senza modifiche su MySQL, PostgreSQL e SQLite.
- 100% lato client — i tuoi dati CSV (che potrebbero includere record di clienti o dati aziendali) vengono analizzati e convertiti nel tuo browser e non vengono mai caricati da nessuna parte.
Come si usa
- Incolla dati CSV con una riga di intestazione, ad es. name,age\nAlice,30\nBob,25.
- Inserisci il nome della tabella di destinazione (predefinito my_table).
- Fai clic su "Genera SQL".
- Copia l'istruzione INSERT INTO o scaricala come file .sql, ed eseguila sul tuo database.
Esempio
Input
name,age,city
Alice,30,
Bob,,NYCRisultato
INSERT INTO `my_table` (`name`, `age`, `city`)
VALUES
('Alice', 30, NULL),
('Bob', NULL, 'NYC');Nota come le celle vuote siano diventate NULL (non stringhe vuote), e il valore numerico age (30) sia rimasto senza virgolette mentre ogni valore testuale è stato racchiuso tra virgolette.
Consigli pratici
- Popolare un database di test locale: esporta un piccolo campione come CSV da un foglio di calcolo, convertilo qui, ed esegui l'istruzione INSERT sul tuo database di sviluppo.
- Controlla sempre i tipi di colonna prima di eseguire l'SQL generato su una tabella reale — questo strumento deduce numerico o testo con un'euristica semplice, non in base al tuo schema reale, quindi una colonna intera che si aspetta un formato specifico potrebbe richiedere un aggiustamento manuale.
- Se hai migliaia di righe, l'unica istruzione INSERT multi-riga generata da questo strumento resta comunque SQL valido, ma istruzioni molto grandi possono superare la dimensione massima del pacchetto di un database — dividi prima il CSV in lotti più piccoli se incontri questo limite.
Perché NULL e non una stringa vuota
Un errore comune quando si scrivono a mano script da CSV a SQL è trattare ogni cella mancante come una stringa vuota ''. Questo è tecnicamente SQL valido, ma di solito non significa ciò che vuoi: una colonna definita come intero rifiuterà '' categoricamente, e anche in una colonna di testo, '' significa silenziosamente qualcosa di diverso da "non conosciamo questo valore" nella maggior parte dei progetti di schema e delle query di reportistica (un controllo WHERE colonna IS NULL non corrisponderà a stringhe vuote, e viceversa). Usare NULL per le celle vuote corrisponde alla semantica che la maggior parte dei database e degli ORM si aspetta, ed evita errori di tipo quando una colonna numerica ha valori mancanti in alcune righe.
Domande frequenti
Funziona con qualsiasi database SQL?
La sintassi generata — identificatori tra apici inversi, valori testuali tra apici singoli, un INSERT INTO ... VALUES ... standard — è comune a MySQL, PostgreSQL e SQLite. PostgreSQL non richiede rigorosamente apici inversi attorno agli identificatori (usa virgolette doppie se serve racchiudere tra virgolette), ma i nomi tra apici inversi non causano problemi neanche lì, a meno che tu non abbia nomi di colonna insoliti che collidono con parole riservate. Non si segue qui un unico standard SQL ufficiale — solo la sintassi che funziona senza modifiche sui database più comuni.
Perché una cella vuota diventa NULL invece di una stringa vuota ''?
È una scelta di progettazione deliberata: nella maggior parte delle esportazioni CSV reali, una cella vuota significa che il valore è sconosciuto o non applicabile, non letteralmente un testo vuoto. NULL è ciò che la maggior parte degli schemi di database si aspetta per questo. Se il tuo caso d'uso necessita realmente di stringhe vuote, dovrai modificare a mano l'SQL generato per quei casi.
Come decide lo strumento se un valore necessita di virgolette?
È un'euristica semplice, non una vera inferenza di tipo: se una cella, ripulita dagli spazi ai bordi, è composta solo da cifre (con un segno meno iniziale opzionale e al massimo un punto decimale), viene scritta senza virgolette come numero. Tutto il resto viene racchiuso tra virgolette come testo. Questo significa che un codice postale come 00501 o un numero di telefono verrebbero trattati come testo solo se contengono caratteri aggiuntivi — uno zero iniziale da solo viene comunque interpretato qui come numerico, quindi ricontrolla identificatori come codici postali e ID prima di eseguire l'SQL.
I miei dati vengono caricati da qualche parte?
No. Sia l'analisi che la generazione dell'SQL avvengono in JavaScript nel tuo browser — nulla viene inviato a un server, il che rende sicuro l'uso con record di clienti o aziendali esportati.
Può gestire valori CSV che contengono virgole o virgolette?
Sì. Il CSV viene analizzato con un analizzatore di campi tra virgolette adeguato, che comprende virgole, interruzioni di riga e virgolette raddoppiate all'interno di campi tra virgolette — non una semplice divisione sulle virgole — quindi un campo come "Smith, John" viene letto come un unico valore, non diviso in due colonne.