Čo je tento nástroj?
Naplnenie testovacej databázy, načítanie exportu z tabuľkového procesora do tabuľky alebo migrácia menšej dátovej sady často začína rovnako: máte CSV súbor a potrebujete SQL. Tento nástroj spracuje váš CSV (pričom hlavičkový riadok použije ako názvy stĺpcov) a vytvorí jeden príkaz INSERT INTO pokrývajúci všetky dátové riadky, pripravený na vloženie do databázového klienta.
Textové hodnoty sa uzatvárajú do jednoduchých úvodzoviek so zdvojenými vnútornými úvodzovkami (takže O'Brien sa stane O''Brien), čo je štandardné pravidlo escapovania spoločné pre MySQL, PostgreSQL a SQLite. Prázdna CSV bunka sa zapíše ako SQL kľúčové slovo NULL namiesto prázdneho reťazca — je to zámerná voľba, pretože prázdna bunka v tabuľke zvyčajne znamená "žiadna hodnota", nie "prázdny kúsok textu", a práve NULL očakáva väčšina schém.
To, či sa hodnota uzatvorí do úvodzoviek alebo ponechá bez nich, sa rozhoduje jednoduchou heuristikou, nie skutočnou detekciou typu: ak orezaná bunka vyzerá ako obyčajné celé alebo desatinné číslo (voliteľne so znamienkom mínus na začiatku), zapíše sa bez úvodzoviek; všetko ostatné — vrátane vecí, ktoré sa len podobajú na čísla s ďalšími znakmi, ako telefónne čísla alebo PSČ s nulami na začiatku — sa uzatvorí do úvodzoviek ako reťazec. Výstup tak zostáva čestný: je to dobrý východiskový bod pre menší import, nie náhrada za overenie vašich dát oproti skutočnej schéme tabuľky pred spustením.
Zdroj: parsovanie CSV sa riadi RFC 4180, čo je najbližšie k formálnemu CSV štandardu; zdvojovanie jednoduchých úvodzoviek pri escapovaní reťazcov je spoločná konvencia zdokumentovaná v MySQL, PostgreSQL a SQLite.
Prečo ho používať?
- Vlastný názov tabuľky — nastavte cieľovú tabuľku raz a každý riadok bude smerovať do nej.
- Správne escapovanie reťazcov — jednoduché úvodzovky vo vnútri hodnôt sú zdvojené, takže SQL sa nepokazí ani neskráti.
- Predvídateľné spracovanie NULL — prázdne bunky sa menia na NULL namiesto prázdneho reťazca, tak ako väčšina databáz rozlišuje chýbajúce dáta.
- Bežná SQL syntax — tvar INSERT INTO ... VALUES ... generovaný tu funguje bez úprav v MySQL, PostgreSQL a SQLite.
- 100% na strane klienta — vaše CSV dáta (ktoré môžu obsahovať záznamy o zákazníkoch alebo firemné údaje) sa spracujú a konvertujú vo vašom prehliadači a nikdy sa nikam neodosielajú.
Ako sa používa
- Vložte CSV dáta s hlavičkovým riadkom, napr. name,age\nAlice,30\nBob,25.
- Zadajte názov cieľovej tabuľky (predvolene my_table).
- Kliknite na "Generovať SQL".
- Skopírujte príkaz INSERT INTO alebo ho stiahnite ako .sql súbor a potom ho spustite vo vašej databáze.
Príklad
Vstup
name,age,city
Alice,30,
Bob,,NYCVýstup
INSERT INTO `my_table` (`name`, `age`, `city`)
VALUES
('Alice', 30, NULL),
('Bob', NULL, 'NYC');Všimnite si, že prázdne bunky sa zmenili na NULL (nie na prázdne reťazce) a číselne vyzerajúca hodnota veku 30 zostala bez úvodzoviek, zatiaľ čo každá textová hodnota bola do úvodzoviek uzatvorená.
Praktické tipy
- Naplnenie lokálnej testovacej databázy: exportujte malú vzorku ako CSV z tabuľkového procesora, skonvertujte ju tu a spustite príkaz INSERT vo vašej vývojovej databáze.
- Pred spustením vygenerovaného SQL kódu na reálnej tabuľke vždy skontrolujte typy stĺpcov — tento nástroj odhaduje číselné vs. textové hodnoty jednoduchou heuristikou, nie podľa vašej skutočnej schémy, takže stĺpec typu integer očakávajúci konkrétny formát môže vyžadovať ručnú úpravu.
- Ak máte tisíce riadkov, jeden viacriadkový príkaz INSERT, ktorý tento nástroj generuje, je stále platné SQL, no veľmi veľké príkazy môžu naraziť na maximálnu veľkosť paketu databázy — ak na tento limit narazíte, rozdeľte CSV najprv na menšie dávky.
Prečo NULL a nie prázdny reťazec
Bežná chyba pri ručnom písaní skriptov na konverziu CSV na SQL je spracovanie každej chýbajúcej bunky ako prázdneho reťazca ''. To je technicky platné SQL, no zvyčajne to neznamená to, čo chcete: stĺpec definovaný ako integer '' priamo odmietne, a aj v textovom stĺpci '' vo väčšine návrhov schém a reportovacích dotazov ticho znamená niečo iné než "túto hodnotu nepoznáme" (kontrola WHERE column IS NULL nezachytí prázdne reťazce, a naopak). Použitie NULL pre prázdne bunky zodpovedá sémantike, ktorú očakáva väčšina databáz a ORM, a zabraňuje chybám typu, keď numerický stĺpec má v niektorých riadkoch chýbajúce hodnoty.
Časté otázky
Funguje to s každou SQL databázou?
Vygenerovaná syntax — identifikátory v spätných úvodzovkách, reťazcové hodnoty v jednoduchých úvodzovkách, štandardné INSERT INTO ... VALUES ... — je bežná naprieč MySQL, PostgreSQL a SQLite. PostgreSQL striktne nevyžaduje spätné úvodzovky okolo identifikátorov (používa dvojité úvodzovky, ak je uvádzanie vôbec potrebné), ale identifikátory v spätných úvodzovkách sú aj tam neškodné, pokiaľ nemáte nezvyčajné názvy stĺpcov kolidujúce s vyhradenými slovami. Neexistuje tu jeden oficiálny SQL štandard, ktorý by sa dodržiaval — len syntax, ktorá funguje bez úprav naprieč najbežnejšími databázami.
Prečo sa prázdna bunka mení na NULL namiesto prázdneho reťazca ''?
Ide o zámerné rozhodnutie: vo väčšine reálnych CSV exportov prázdna bunka znamená, že hodnota je neznáma alebo neaplikovateľná, nie doslova prázdny kúsok textu. NULL je to, čo väčšina databázových schém pre tento prípad očakáva. Ak váš prípad použitia skutočne potrebuje prázdne reťazce namiesto toho, budete musieť pre tieto prípady vygenerovaný SQL kód upraviť ručne.
Ako nástroj rozhoduje, či hodnota potrebuje úvodzovky?
Ide o jednoduchú heuristiku, nie skutočnú detekciu typu: ak orezaná bunka pozostáva len z číslic (s voliteľným mínusom na začiatku a najviac jednou desatinnou bodkou), zapíše sa bez úvodzoviek ako číslo. Všetko ostatné sa uzatvára do úvodzoviek ako reťazec. To znamená, že PSČ ako 00501 alebo telefónne číslo by sa spracovalo ako text (keďže samostatná úvodná nula stále prejde ako číselná hodnota tu, preto skontrolujte identifikátory ako PSČ a ID pred spustením SQL).
Odosielajú sa moje dáta niekam?
Nie. Parsovanie aj generovanie SQL prebieha v JavaScripte vo vašom prehliadači — nič sa neodosiela na server, čo umožňuje bezpečné použitie s exportovanými zákazníckymi alebo firemnými záznamami.
Zvládne to CSV hodnoty obsahujúce čiarky alebo úvodzovky?
Áno. CSV sa parsuje pomocou skutočného parsera pre polia v úvodzovkách, ktorý rozumie čiarkam, zalomeniam riadkov a zdvojeným úvodzovkám vo vnútri polí v úvodzovkách — nejde len o naivné rozdelenie podľa čiarok — takže pole ako "Smith, John" sa načíta ako jedna hodnota, nerozdelí sa na dva stĺpce.