Što je ovaj alat?
Punjenje testne baze podataka, učitavanje izvoza iz proračunske tablice u tablicu ili migracija manjeg skupa podataka često počinje na isti način: imate CSV datoteku i trebate SQL. Ovaj alat parsira vaš CSV (koristeći redak zaglavlja kao nazive stupaca) i gradi jednu INSERT INTO naredbu koja pokriva svaki redak podataka, spremnu za lijepljenje u klijent baze podataka.
Tekstualne vrijednosti omotavaju se jednostrukim navodnicima s unutarnjim navodnicima izbjegnutim udvostručavanjem (tako O'Brien postaje O''Brien), što je standardno pravilo za izbjegavanje koje dijele MySQL, PostgreSQL i SQLite. Prazna CSV ćelija zapisuje se kao SQL ključna riječ NULL umjesto praznog niza — to je namjeran izbor, jer prazna ćelija u proračunskoj tablici obično znači 'nema vrijednosti', a ne 'prazan komad teksta', a NULL je ono što većina shema očekuje za to.
Hoće li vrijednost biti pod navodnicima ili ne odlučuje jednostavna heuristika, ne stvarno zaključivanje tipa: ako obrezana ćelija izgleda kao obični cijeli ili decimalni broj (opcionalno s vodećim predznakom minus), zapisuje se bez navodnika; sve ostalo — uključujući stvari koje samo podsjećaju na brojeve s dodatnim znakovima, poput telefonskih brojeva ili poštanskih brojeva s vodećim nulama — navodi se kao tekst. Ovo održava izlaz iskrenim: dobra je polazna točka za manji uvoz, a ne zamjena za provjeru vaših podataka u odnosu na stvarnu shemu tablice prije pokretanja.
Izvor: CSV parsiranje slijedi RFC 4180, najbliže formalnom CSV standardu; udvostručavanje jednostrukih navodnika za izbjegavanje niza zajednička je konvencija koju dokumentiraju MySQL, PostgreSQL i SQLite.
Zašto ga koristiti?
- Prilagođeni naziv tablice — postavite ciljanu tablicu jednom, a svaki redak cilja tu tablicu.
- Ispravno izbjegavanje niza — jednostruki navodnici unutar vrijednosti udvostručuju se kako se SQL ne bi pokvario ili skratio.
- Predvidljivo rukovanje NULL vrijednostima — prazne ćelije postaju NULL umjesto praznog niza, u skladu s time kako većina baza podataka razlikuje nedostajuće podatke.
- Uobičajena SQL sintaksa — oblik INSERT INTO ... VALUES ... ovdje generiran radi bez izmjena u MySQL-u, PostgreSQL-u i SQLite-u.
- 100% na strani klijenta — vaši CSV podaci (koji mogu uključivati podatke o klijentima ili poslovne podatke) parsiraju se i pretvaraju u vašem pregledniku i nikad se ne šalju nikamo.
Kako ga koristiti
- Zalijepite CSV podatke s retkom zaglavlja, npr. name,age\nAlice,30\nBob,25.
- Unesite naziv ciljane tablice (zadano je my_table).
- Kliknite "Generate SQL".
- Kopirajte INSERT INTO naredbu ili je preuzmite kao .sql datoteku, a zatim je pokrenite u svojoj bazi podataka.
Primjer
Ulaz
name,age,city
Alice,30,
Bob,,NYCIzlaz
INSERT INTO `my_table` (`name`, `age`, `city`)
VALUES
('Alice', 30, NULL),
('Bob', NULL, 'NYC');Primijetite da su prazne ćelije postale NULL (ne prazni nizovi), a numerička vrijednost age 30 ostala je bez navodnika dok su sve tekstualne vrijednosti navedene pod navodnicima.
Praktični savjeti
- Punjenje lokalne testne baze podataka: izvezite mali uzorak kao CSV iz proračunske tablice, pretvorite ga ovdje i pokrenite INSERT naredbu u svojoj razvojnoj bazi podataka.
- Uvijek pregledajte tipove stupaca prije pokretanja generiranog SQL-a u stvarnoj tablici — ovaj alat zaključuje numeričko naspram tekstualnog jednostavnom heuristikom, ne vašom stvarnom shemom, pa stupac cijelog broja koji očekuje određeni format može trebati ručnu prilagodbu.
- Ako imate tisuće redaka, jedna INSERT naredba s više redaka koju ovaj alat generira i dalje je valjan SQL, ali vrlo velike naredbe mogu naići na maksimalnu veličinu paketa baze podataka — prvo podijelite CSV u manje serije ako naiđete na to ograničenje.
Zašto NULL, a ne prazan niz
Česta pogreška pri ručnom pisanju skripti za CSV-u-SQL je tretiranje svake nedostajuće ćelije kao praznog niza ''. To je tehnički valjan SQL, ali obično ne znači ono što želite: stupac definiran kao cijeli broj u potpunosti će odbiti '', a čak i u tekstualnom stupcu, '' tiho znači nešto drugačije od 'ne znamo tu vrijednost' u većini dizajna shema i izvještajnih upita (provjera WHERE column IS NULL neće se podudarati s praznim nizovima, i obrnuto). Korištenje NULL za prazne ćelije odgovara semantici koju očekuje većina baza podataka i ORM-ova, i izbjegava pogreške tipa kada numerički stupac ima nedostajuće vrijednosti u nekim recima.
Često postavljana pitanja
Radi li ovo sa svakom SQL bazom podataka?
Generirana sintaksa — identifikatori pod obrnutim navodnicima, tekstualne vrijednosti pod jednostrukim navodnicima, standardni INSERT INTO ... VALUES ... — uobičajena je u MySQL-u, PostgreSQL-u i SQLite-u. PostgreSQL strogo ne zahtijeva obrnute navodnike oko identifikatora (koristi dvostruke navodnike ako je navođenje uopće potrebno), ali identifikatori pod obrnutim navodnicima ondje su bezopasni sve dok nemate neobične nazive stupaca koji se sudaraju s rezerviranim riječima. Ne slijedi se jedinstveni službeni SQL standard — samo sintaksa koja radi bez izmjena u najčešćim bazama podataka.
Zašto prazna ćelija postaje NULL umjesto praznog niza ''?
Ovo je namjeran dizajnerski izbor: u većini stvarnih CSV izvoza, prazna ćelija znači da je vrijednost nepoznata ili nije primjenjiva, a ne doslovno prazan komad teksta. NULL je ono što većina shema baza podataka očekuje za to. Ako vaš slučaj upotrebe stvarno treba prazne nizove, morat ćete ručno urediti generirani SQL za te slučajeve.
Kako alat odlučuje treba li vrijednosti navodnike?
Riječ je o jednostavnoj heuristici, ne stvarnom zaključivanju tipa: ako se obrezana ćelija sastoji samo od znamenki (s opcionalnim vodećim minusom i najviše jednom decimalnom točkom), zapisuje se bez navodnika kao broj. Sve ostalo navodi se kao tekst. To znači da bi se poštanski broj poput 00501 ili telefonski broj tretirao kao tekst samo ako ima dodatne znakove — vodeća nula sama po sebi ovdje se i dalje parsira kao brojčana, pa dvaput provjerite identifikatore poput poštanskih brojeva i ID-ova prije pokretanja SQL-a.
Šalju li se moji podaci ikamo?
Ne. Parsiranje i generiranje SQL-a odvijaju se u JavaScriptu u vašem pregledniku — ništa se ne šalje na poslužitelj, što ovo čini sigurnim za korištenje s izvezenim podacima o klijentima ili poslovnim podacima.
Može li obraditi CSV vrijednosti koje sadrže zareze ili navodnike?
Da. CSV se parsira pravim parserom za polja pod navodnicima koji razumije zareze, prijelome redaka i udvostručene navodnike unutar polja pod navodnicima — ne naivnim dijeljenjem po zarezima — pa se polje poput "Smith, John" čita kao jedna vrijednost, a ne dijeli u dva stupca.