Czym jest to narzędzie?
Wypełnianie testowej bazy danych, wczytywanie eksportu arkusza kalkulacyjnego do tabeli lub migracja niewielkiego zbioru danych zwykle zaczyna się tak samo: masz plik CSV, a potrzebujesz SQL. To narzędzie analizuje Twój CSV (używając wiersza nagłówka jako nazw kolumn) i buduje jedną instrukcję INSERT INTO obejmującą wszystkie wiersze danych, gotową do wklejenia do klienta bazy danych.
Wartości tekstowe są ujmowane w pojedyncze cudzysłowy, a wewnętrzne cudzysłowy są maskowane przez ich podwojenie (więc O'Brien staje się O''Brien) — to standardowa reguła maskowania wspólna dla MySQL, PostgreSQL i SQLite. Pusta komórka CSV jest zapisywana jako słowo kluczowe SQL NULL, a nie jako pusty ciąg znaków — to celowy wybór, ponieważ pusta komórka w arkuszu kalkulacyjnym zwykle oznacza „brak wartości”, a nie „pusty tekst”, a to właśnie NULL większość schematów oczekuje w takiej sytuacji.
To, czy wartość zostanie ujęta w cudzysłowy, decyduje prosta heurystyka, a nie prawdziwe wnioskowanie o typie: jeśli komórka po usunięciu białych znaków na końcach wygląda jak zwykła liczba całkowita lub dziesiętna (opcjonalnie z wiodącym znakiem minus), zapisywana jest bez cudzysłowów; wszystko inne — w tym wartości, które jedynie przypominają liczby, ale zawierają dodatkowe znaki, jak kody pocztowe z wiodącymi zerami — jest ujmowane w cudzysłowy jako tekst. Dzięki temu wynik pozostaje uczciwy: to dobry punkt wyjścia do niewielkiego importu, a nie substytut sprawdzenia danych względem rzeczywistego schematu tabeli przed uruchomieniem.
Źródło: parsowanie CSV jest zgodne z RFC 4180, najbliższym odpowiednikiem formalnego standardu CSV; podwajanie pojedynczego cudzysłowu w celu maskowania ciągów znaków to wspólna konwencja udokumentowana przez MySQL, PostgreSQL i SQLite.
Dlaczego warto go używać?
- Konfigurowalna nazwa tabeli — ustaw ją raz, a każdy wiersz będzie się do niej odnosić.
- Poprawne maskowanie ciągów znaków — pojedyncze cudzysłowy wewnątrz wartości są podwajane, dzięki czemu SQL się nie łamie ani nie zostaje obcięty.
- Przewidywalna obsługa NULL — puste komórki stają się NULL zamiast pustego ciągu znaków, zgodnie z tym, jak większość baz danych rozróżnia brakujące dane.
- Powszechna składnia SQL — wygenerowany tutaj INSERT INTO ... VALUES ... działa bez modyfikacji w MySQL, PostgreSQL i SQLite.
- W 100% po stronie klienta — Twoje dane CSV (które mogą zawierać rekordy klientów lub dane biznesowe) są analizowane i konwertowane w przeglądarce i nigdy nigdzie nie są przesyłane.
Jak używać
- Wklej dane CSV z wierszem nagłówka, np. name,age\nAlice,30\nBob,25.
- Wprowadź nazwę docelowej tabeli (domyślnie my_table).
- Kliknij „Generuj SQL”.
- Skopiuj instrukcję INSERT INTO lub pobierz ją jako plik .sql, a następnie uruchom ją na swojej bazie danych.
Przykład
Wejście
name,age,city
Alice,30,
Bob,,NYCWynik
INSERT INTO `my_table` (`name`, `age`, `city`)
VALUES
('Alice', 30, NULL),
('Bob', NULL, 'NYC');Zwróć uwagę, że puste komórki stały się NULL (a nie pustymi ciągami znaków), a wyglądająca jak liczba wartość age (30) pozostała bez cudzysłowów, podczas gdy każda wartość tekstowa została ujęta w cudzysłowy.
Praktyczne wskazówki
- Wypełnianie lokalnej testowej bazy danych: wyeksportuj małą próbkę jako CSV z arkusza kalkulacyjnego, przekonwertuj ją tutaj i uruchom instrukcję INSERT na swojej bazie danych deweloperskiej.
- Zawsze sprawdzaj typy kolumn przed uruchomieniem wygenerowanego SQL na rzeczywistej tabeli — to narzędzie wnioskuje o wartości liczbowe kontra tekst za pomocą prostej heurystyki, a nie Twojego rzeczywistego schematu, więc kolumna całkowitoliczbowa oczekująca konkretnego formatu może wymagać ręcznej korekty.
- Jeśli masz tysiące wierszy, pojedyncza wielowierszowa instrukcja INSERT generowana przez to narzędzie nadal jest poprawnym SQL, ale bardzo duże instrukcje mogą przekroczyć maksymalny rozmiar pakietu bazy danych — jeśli napotkasz to ograniczenie, najpierw podziel CSV na mniejsze partie.
Dlaczego NULL, a nie pusty ciąg znaków
Częstym błędem przy ręcznym pisaniu skryptów CSV do SQL jest traktowanie każdej brakującej komórki jako pustego ciągu znaków ''. Jest to technicznie poprawny SQL, ale zwykle nie oznacza tego, czego chcesz: kolumna zdefiniowana jako liczba całkowita po prostu odrzuci '', a nawet w kolumnie tekstowej '' po cichu oznacza coś innego niż „nie znamy tej wartości” w większości projektów schematów i zapytań raportowych (sprawdzenie WHERE kolumna IS NULL nie dopasuje pustych ciągów znaków, i odwrotnie). Użycie NULL dla pustych komórek odpowiada semantyce oczekiwanej przez większość baz danych i ORM-ów oraz pozwala uniknąć błędów typu, gdy kolumna liczbowa ma brakujące wartości w niektórych wierszach.
Najczęściej zadawane pytania
Czy działa to z każdą bazą danych SQL?
Wygenerowana składnia — identyfikatory w apostrofach wstecznych, wartości tekstowe w pojedynczych cudzysłowach, standardowe INSERT INTO ... VALUES ... — jest powszechna w MySQL, PostgreSQL i SQLite. PostgreSQL nie wymaga ściśle apostrofów wstecznych wokół identyfikatorów (używa podwójnych cudzysłowów, jeśli w ogóle potrzebne jest cytowanie), ale nazwy w apostrofach wstecznych też tam nie powodują problemów, o ile nie masz nietypowych nazw kolumn kolidujących ze słowami zastrzeżonymi. Nie stosuje się tutaj żadnego pojedynczego oficjalnego standardu SQL — tylko składnię, która działa bez zmian w najpopularniejszych bazach danych.
Dlaczego pusta komórka staje się NULL, a nie pustym ciągiem znaków ''?
To celowa decyzja projektowa: w większości rzeczywistych eksportów CSV pusta komórka oznacza, że wartość jest nieznana lub nie ma zastosowania, a nie dosłownie pusty tekst. NULL jest tym, czego większość schematów baz danych oczekuje w takiej sytuacji. Jeśli Twój przypadek użycia rzeczywiście wymaga pustych ciągów znaków, będziesz musiał ręcznie edytować wygenerowany SQL dla takich przypadków.
Jak narzędzie decyduje, czy wartość wymaga cudzysłowów?
To prosta heurystyka, a nie prawdziwe wnioskowanie o typie: jeśli komórka po usunięciu białych znaków na końcach składa się wyłącznie z cyfr (z opcjonalnym wiodącym znakiem minus i co najwyżej jedną kropką dziesiętną), jest zapisywana bez cudzysłowów jako liczba. Wszystko inne jest ujmowane w cudzysłowy jako tekst. Oznacza to, że kod pocztowy taki jak 00501 lub numer telefonu zostałyby potraktowane jako tekst tylko wtedy, gdy mają dodatkowe znaki — samo wiodące zero nadal jest tutaj interpretowane jako liczba, więc koniecznie sprawdź identyfikatory takie jak kody pocztowe i ID przed uruchomieniem SQL.
Czy moje dane są gdzieś przesyłane?
Nie. Zarówno analiza, jak i generowanie SQL odbywają się w JavaScript w Twojej przeglądarce — nic nie jest wysyłane do serwera, co czyni to bezpiecznym do użycia z wyeksportowanymi danymi klientów lub danymi biznesowymi.
Czy potrafi obsłużyć wartości CSV zawierające przecinki lub cudzysłowy?
Tak. CSV jest analizowany za pomocą odpowiedniego analizatora pól w cudzysłowach, który rozumie przecinki, znaki nowej linii i podwojone cudzysłowy wewnątrz pól w cudzysłowach — nie zwykłe dzielenie po przecinkach — więc pole takie jak „Smith, John” jest odczytywane jako jedna wartość, a nie dzielone na dwie kolumny.