Hva er dette verktøyet?
Å så en testdatabase, laste en regnearkeksport inn i en tabell, eller migrere et lite datasett starter ofte på samme måte: du har en CSV-fil og trenger SQL. Dette verktøyet parser CSV-en din (bruker headerraden som kolonnenavn) og bygger én INSERT INTO-setning som dekker hver dataradene, klar til å limes inn i en databaseklient.
Tekstverdier pakkes inn i enkle anførselstegn med interne anførselstegn escapet ved å dobles (så O'Brien blir O''Brien), som er den standard escape-regelen delt av MySQL, PostgreSQL og SQLite. En tom CSV-celle skrives som SQL-nøkkelordet NULL i stedet for en tom streng — det er et bevisst valg, siden en tom celle i et regneark vanligvis betyr «ingen verdi» snarere enn «et tomt tekststykke», og NULL er hva de fleste dataskjemaer forventer for det.
Om en verdi får anførselstegn eller ikke, avgjøres av en enkel heuristikk, ikke ekte typeinferens: hvis den trimmede cellen ser ut som et rent heltall eller desimaltall (eventuelt med et ledende minustegn), skrives den uten anførselstegn; alt annet — inkludert ting som bare minner om tall med ekstra tegn, som telefonnumre eller postnumre med ledende nuller — settes i anførselstegn som tekst. Dette holder resultatet ærlig: det er et godt utgangspunkt for en liten import, ikke en erstatning for å validere dataene dine mot det faktiske tabellskjemaet ditt før du kjører den.
Kilde: CSV-parsingen følger RFC 4180, det nærmeste vi kommer en formell CSV-standard; dobling av enkle anførselstegn for tekst-escaping er den delte konvensjonen dokumentert av MySQL, PostgreSQL og SQLite.
Hvorfor bruke det?
- Egendefinert tabellnavn — sett målet én gang, og hver rad retter seg mot den tabellen.
- Korrekt tekst-escaping — enkle anførselstegn i verdier dobles slik at SQL-en ikke brytes eller kuttes.
- Forutsigbar NULL-håndtering — tomme celler blir NULL i stedet for en tom streng, i tråd med hvordan de fleste databaser skiller manglende data.
- Vanlig SQL-syntaks — INSERT INTO ... VALUES ...-formen som genereres her fungerer uendret i MySQL, PostgreSQL og SQLite.
- 100 % klient-side — CSV-dataene dine (som kan inneholde kundeopplysninger eller forretningsdata) parses og konverteres i nettleseren din og lastes aldri opp noe sted.
Slik bruker du det
- Lim inn CSV-data med en headerrad, f.eks. name,age\nAlice,30\nBob,25.
- Skriv inn måltabellens navn (standard er my_table).
- Klikk «Generer SQL».
- Kopier INSERT INTO-setningen eller last den ned som en .sql-fil, og kjør den deretter mot databasen din.
Eksempel
Inndata
name,age,city
Alice,30,
Bob,,NYCResultat
INSERT INTO `my_table` (`name`, `age`, `city`)
VALUES
('Alice', 30, NULL),
('Bob', NULL, 'NYC');Legg merke til at de tomme cellene ble NULL (ikke tomme strenger), og at den tallignende alder-verdien 30 ble skrevet uten anførselstegn mens hver tekstverdi fikk anførselstegn.
Praktiske tips
- Å så en lokal testdatabase: eksporter et lite utvalg som CSV fra et regneark, konverter det her, og kjør INSERT-setningen mot dev-databasen din.
- Sjekk alltid kolonnetyper før du kjører den genererte SQL-en mot en ekte tabell — dette verktøyet gjetter numerisk vs. tekst med en enkel heuristikk, ikke det faktiske skjemaet ditt, så en heltallskolonne som forventer et spesifikt format kan trenge manuell justering.
- Hvis du har tusenvis av rader, er den ene multi-rad INSERT-setningen dette verktøyet genererer fortsatt gyldig SQL, men svært store setninger kan overskride databasens maksimale pakkestørrelse — del opp CSV-en i mindre batcher først hvis du treffer den grensen.
Hvorfor NULL og ikke en tom streng
En vanlig feil når man skriver CSV-til-SQL-skript for hånd, er å behandle hver manglende celle som en tom streng ''. Det er teknisk gyldig SQL, men det betyr som regel ikke det du vil: en kolonne definert som et heltall vil avvise '' rett ut, og selv i en tekstkolonne betyr '' ofte noe annet enn «vi vet ikke denne verdien» i de fleste skjemadesign og rapporteringsspørringer (en WHERE column IS NULL-sjekk matcher ikke tomme strenger, og motsatt). Å bruke NULL for tomme celler matcher semantikken de fleste databaser og ORM-er forventer, og det unngår typefeil når en numerisk kolonne tilfeldigvis mangler verdier i noen rader.
Ofte stilte spørsmål
Fungerer dette med alle SQL-databaser?
Syntaksen som genereres — identifikatorer i backtick, tekstverdier i enkle anførselstegn, standard INSERT INTO ... VALUES ... — er felles for MySQL, PostgreSQL og SQLite. PostgreSQL krever strengt tatt ikke backticks rundt identifikatorer (den bruker doble anførselstegn hvis det i det hele tatt trengs anførsel), men backtick-omsluttede navn er ufarlige der også, så lenge du ikke har uvanlige kolonnenavn som kolliderer med reserverte ord. Det finnes ingen enkelt offisiell SQL-standard som følges her — bare syntaksen som fungerer uendret på tvers av de vanligste databasene.
Hvorfor blir en tom celle NULL i stedet for en tom streng ''?
Dette er et bevisst designvalg: i de fleste virkelige CSV-eksporter betyr en tom celle at verdien er ukjent eller ikke gjelder, ikke bokstavelig talt et tomt tekststykke. NULL er hva de fleste dataskjemaer forventer for det. Hvis bruksområdet ditt virkelig trenger tomme strenger i stedet, må du redigere den genererte SQL-en for hånd i de tilfellene.
Hvordan avgjør verktøyet om en verdi trenger anførselstegn?
Det er en enkel heuristikk, ikke ekte typeinferens: hvis en trimmet celle bare består av siffer (med et valgfritt ledende minustegn og maks ett desimaltegn), skrives den uten anførselstegn som et tall. Alt annet settes i anførselstegn som tekst. Det betyr at et postnummer som 00501 eller et telefonnummer vil bli behandlet som tekst kun hvis det inneholder ekstra tegn utover det strenge heltallsmønsteret — en enkelt ledende null tolkes fortsatt som numerisk her, så dobbeltsjekk identifikatorer som postnumre og ID-er før du kjører SQL-en.
Blir dataene mine lastet opp noe sted?
Nei. Både parsing og SQL-generering skjer i JavaScript i nettleseren din — ingenting sendes til en server, noe som gjør dette trygt å bruke med eksporterte kunde- eller forretningsopplysninger.
Kan den håndtere CSV-verdier som inneholder komma eller anførselstegn?
Ja. CSV-en parses med en ordentlig parser for anførselsfelter som forstår komma, linjeskift og doblede anførselstegn inni felt med anførselstegn — ikke en naiv splitting på komma — så et felt som "Smith, John" leses som én verdi, ikke splittet i to kolonner.