Vad är detta verktyg?
Att fylla en testdatabas, ladda en kalkylbladsexport i en tabell, eller migrera ett litet dataset börjar ofta likadant: du har en CSV-fil och behöver SQL. Det här verktyget tolkar din CSV (med rubrikraden som kolumnnamn) och bygger en INSERT INTO-sats som täcker varje datarad, redo att klistras in i en databasklient.
Strängvärden omsluts av enkla citattecken med interna citattecken escapade genom att dubblera dem (så O'Brien blir O''Brien), vilket är den standardregel för escaping som delas av MySQL, PostgreSQL och SQLite. En tom CSV-cell skrivs som SQL-nyckelordet NULL istället för en tom sträng — det är ett medvetet val, eftersom en tom cell i ett kalkylblad oftast betyder "inget värde" snarare än "en tom textbit", och NULL är vad de flesta scheman förväntar sig för det.
Huruvida ett värde citeras eller lämnas obehandlat avgörs av en enkel heuristik, inte riktig typinferens: om den trimmade cellen ser ut som ett rent heltal eller decimaltal (eventuellt med ett inledande minustecken) skrivs det ociterat; allt annat — inklusive sådant som bara liknar tal med extra tecken, som telefonnummer eller postnummer med inledande nollor — citeras som en sträng. Detta håller utdata ärlig: det är en bra startpunkt för en liten import, inte en ersättning för att validera din data mot ditt faktiska tabellschema innan du kör den.
Källa: CSV-tolkningen följer RFC 4180, det närmaste en formell CSV-standard som finns; dubblering av enkla citattecken för strängescaping är den delade konventionen dokumenterad av MySQL, PostgreSQL och SQLite.
Varför använda det?
- Eget tabellnamn — ställ in målet tabellen en gång, och varje rad riktar sig mot den tabellen.
- Korrekt strängescaping — enkla citattecken inuti värden dubbleras så att SQL:en inte går sönder eller trunkeras.
- Förutsägbar NULL-hantering — tomma celler blir NULL istället för en tom sträng, i linje med hur de flesta databaser skiljer på saknad data.
- Vanlig SQL-syntax — formen INSERT INTO ... VALUES ... som genereras här fungerar oförändrad i MySQL, PostgreSQL och SQLite.
- 100 % klientsidan — din CSV-data (som kan innehålla kunduppgifter eller affärsdata) tolkas och konverteras i din webbläsare och laddas aldrig upp någonstans.
Så använder du det
- Klistra in CSV-data med en rubrikrad, t.ex. name,age\nAlice,30\nBob,25.
- Ange måltabellens namn (standard är my_table).
- Klicka på "Generera SQL".
- Kopiera INSERT INTO-satsen eller ladda ner den som en .sql-fil, kör den sedan mot din databas.
Exempel
Inmatning
name,age,city
Alice,30,
Bob,,NYCResultat
INSERT INTO `my_table` (`name`, `age`, `city`)
VALUES
('Alice', 30, NULL),
('Bob', NULL, 'NYC');Lägg märke till att de tomma cellerna blev NULL (inte tomma strängar), och att det talliknande age-värdet 30 lämnades ociterat medan varje textvärde citerades.
Praktiska tips
- Fylla en lokal testdatabas: exportera ett litet urval som CSV från ett kalkylblad, konvertera det här, och kör INSERT-satsen mot din utvecklingsdatabas.
- Granska alltid kolumntyper innan du kör den genererade SQL:en mot en riktig tabell — det här verktyget härleder numeriskt kontra text med en enkel heuristik, inte ditt faktiska schema, så en heltalskolumn som förväntar sig ett specifikt format kan behöva manuell justering.
- Om du har tusentals rader är den enda flerraders INSERT-satsen som det här verktyget genererar fortfarande giltig SQL, men mycket stora satser kan träffa en databas maxpaketstorlek — dela upp CSV:n i mindre batchar först om du stöter på den gränsen.
Varför NULL och inte en tom sträng
Ett vanligt misstag när man handskriver CSV-till-SQL-skript är att behandla varje saknad cell som en tom sträng ''. Det är tekniskt giltig SQL, men det betyder oftast inte vad du vill: en kolumn definierad som ett heltal kommer att avvisa '' rakt av, och även i en textkolumn betyder '' tyst något annat än "vi vet inte det här värdet" i de flesta schemadesigner och rapporteringsfrågor (en WHERE column IS NULL-kontroll matchar inte tomma strängar, och vice versa). Att använda NULL för tomma celler matchar den semantik de flesta databaser och ORM:er förväntar sig, och det undviker typfel när en numerisk kolumn råkar ha saknade värden i vissa rader.
Vanliga frågor
Fungerar det här med alla SQL-databaser?
Den genererade syntaxen — identifierare med backtick-citat, strängvärden med enkla citattecken, standard INSERT INTO ... VALUES ... — är gemensam för MySQL, PostgreSQL och SQLite. PostgreSQL kräver inte strikt backtick runt identifierare (det använder dubbla citattecken om citering alls behövs), men backtick-citerade namn är ofarliga även där så länge du inte har ovanliga kolumnnamn som krockar med reserverade ord. Det finns ingen enda officiell SQL-standard som följs här — bara syntaxen som fungerar oförändrad över de vanligaste databaserna.
Varför blir en tom cell NULL istället för en tom sträng ''?
Detta är ett medvetet designval: i de flesta verkliga CSV-exporter betyder en tom cell att värdet är okänt eller inte tillämpligt, inte bokstavligen en tom textbit. NULL är vad de flesta databasscheman förväntar sig för det. Om ditt användningsfall verkligen behöver tomma strängar istället måste du redigera den genererade SQL:en för hand för de fallen.
Hur avgör verktyget om ett värde behöver citattecken?
Det är en enkel heuristik, inte riktig typinferens: om en trimmad cell bara består av siffror (med ett valfritt inledande minustecken och högst en decimalpunkt) skrivs den ociterad som ett tal. Allt annat citeras som en sträng. Detta betyder att ett postnummer som 00501 eller ett telefonnummer skulle behandlas som text (eftersom det bara misslyckas med det strikta heltalsmönstret om det har extra tecken — en enda inledande nolla tolkas fortfarande som numerisk här, så dubbelkolla identifierare som postnummer och ID:n innan du kör SQL:en).
Laddas min data upp någonstans?
Nej. Både tolkning och SQL-generering sker i JavaScript i din webbläsare — inget skickas till en server, vilket gör detta säkert att använda med exporterade kund- eller affärsdata.
Kan den hantera CSV-värden som innehåller kommatecken eller citattecken?
Ja. CSV:n tolkas med en riktig citerad-fält-parser som förstår kommatecken, radbrytningar och dubblerade citattecken inuti citerade fält — inte en naiv uppdelning på kommatecken — så ett fält som "Smith, John" läses som ett värde, inte uppdelat i två kolumner.