CodeKitHub
Strumenti JSON

Convertitore da CSV a SQL

Ultimo aggiornamento:

Per trasformare una riga CSV in SQL, ogni colonna diventa un valore in un'istruzione INSERT INTO — i numeri restano senza virgolette, il testo viene racchiuso tra apici singoli con gli apici interni raddoppiati (O'Brien diventa O''Brien), e le celle vuote diventano NULL. Questo strumento applica questa conversione all'intero file CSV, interamente nel tuo browser, con il nome tabella che scegli tu e un corretto escaping delle stringhe, così i fogli di calcolo esportati o i dump del database non lasciano mai il tuo dispositivo.

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

  1. Incolla dati CSV con una riga di intestazione, ad es. name,age\nAlice,30\nBob,25.
  2. Inserisci il nome della tabella di destinazione (predefinito my_table).
  3. Fai clic su "Genera SQL".
  4. Copia l'istruzione INSERT INTO o scaricala come file .sql, ed eseguila sul tuo database.

Esempio

Input

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

Risultato

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.

Strumenti correlati