Otwórz lub wklej plik CSV, wybierz Baza danych i Instrukcja, a skrypt pojawi się obok opcji. Domyślnie jest to transakcja PostgreSQL z instrukcją CREATE TABLE IF NOT EXISTS z kolumnami TEXT i instrukcjami INSERT po 100 wierszy, więc 00412 pozostaje '00412'. Wybierz Rozpoznawaj liczby i true/false, gdy tabela ma dostać kolumny liczbowe, logiczne i DATE. Plik jest konwertowany w Twojej przeglądarce i nigdy nie jest wysyłany na serwer.
Jak przekonwertować CSV do SQL
- Otwórz plik
.csv,.tsvlub.txt, upuść go na narzędzie albo wklej wiersze. Ogranicznik jest wykrywany automatycznie; ogranicznik, wiersz nagłówka lub starsze kodowanie, np. Windows-1250 czy Windows-1252, ustawisz w sekcji Ustawienia importu. - Wybierz Baza danych: PostgreSQL, MySQL / MariaDB, SQLite lub SQL Server. Sprawdź Nazwa tabeli – domyślnie to nazwa pliku, w której spacje i znaki interpunkcyjne zamieniono na podkreślenia (
sales report.csvstaje sięsales_report). - Wybierz Instrukcja, a przy UPSERT, UPDATE lub DELETE zaznacz Kolumny kluczowe, które identyfikują wiersz.
- Przejrzyj podgląd, a potem kliknij Kopiuj albo pobierz plik
.sqli uruchom go w kliencie bazy danych, np.psql -f data.sql.
Aby wygenerować skrypty dla wielu plików z tymi samymi ustawieniami, wybierz Tryb wsadowy: konwertuj kilka plików. Każdy plik jest konwertowany po kolei, a skrypty pobierasz razem jako jeden plik ZIP.
Instrukcje i opcje
| INSERT | Wielowierszowe instrukcje INSERT INTO … VALUES. Wierszy na jedno INSERT określa, ile wierszy trafia do jednej instrukcji (1–1000, domyślnie 100); SQL Server odrzuca więcej niż 1000. |
|---|---|
| UPSERT (wstaw lub zaktualizuj) | Jedna instrukcja na wiersz, która wstawia go albo aktualizuje istniejący wiersz o tym samym kluczu: ON CONFLICT (…) DO UPDATE SET … = excluded.… w PostgreSQL i SQLite, ON DUPLICATE KEY UPDATE w MySQL oraz MERGE w SQL Server. Tabela docelowa wymaga klucza głównego lub indeksu unikatowego na kolumnach kluczowych. |
| UPDATE | UPDATE … SET … WHERE key = … dla każdego wiersza; kolumny kluczowe się nie zmieniają. Jeśli wszystkie kolumny są kluczowe, nie ma czego aktualizować i żadne instrukcje nie są zapisywane. |
| DELETE | DELETE FROM … WHERE key = … dla każdego wiersza. Pusta wartość klucza zmienia się w IS NULL. |
| Kolumny kluczowe | Wymagane przy UPSERT, UPDATE i DELETE; narzędzie nie zapisze żadnej z tych instrukcji bez klucza w WHERE. Przy opcji Dodaj CREATE TABLE kolumny kluczowe dostają NOT NULL i tworzą PRIMARY KEY. |
| Dodaj CREATE TABLE | Domyślnie włączone. Zapisuje CREATE TABLE IF NOT EXISTS (zwykłe CREATE TABLE dla SQL Server albo po instrukcji DROP). |
| Najpierw dodaj DROP TABLE IF EXISTS | Zastępuje istniejącą tabelę o tej samej nazwie. Domyślnie wyłączone; po uruchomieniu skryptu stara tabela i jej dane przepadają. |
| Umieść w transakcji | Domyślnie włączone: BEGIN; … COMMIT; (START TRANSACTION; w MySQL, BEGIN TRANSACTION; w SQL Server). |
| Zapisuj puste komórki jako NULL | Domyślnie włączone. Wyłącz, aby zamiast tego zapisywać puste komórki jako ''. |
Typy kolumn i cudzysłowy
Przy opcji Zachowaj wszystkie wartości jako tekst (domyślnej) każda kolumna ma typ TEXT (NVARCHAR(MAX) w SQL Server), a każda wartość jest literałem tekstowym w cudzysłowie, więc zera wiodące, długie identyfikatory i nietypowe daty trafiają do bazy bez zmian.
Przy opcji Rozpoznawaj liczby i true/false kolumna dostaje typ tylko wtedy, gdy pasuje do niego każda niepusta wartość:
| Liczby całkowite | INTEGER albo BIGINT, gdy wartość ma więcej niż 9 cyfr. Wartości są zapisywane bez cudzysłowów. Liczby z zerami wiodącymi lub większe niż 9 007 199 254 740 991 sprawiają, że kolumna pozostaje tekstowa. |
|---|---|
| Liczby dziesiętne (najwyżej 15 cyfr znaczących) | NUMERIC w PostgreSQL, DECIMAL(p,s) z rozmiarem dobranym do danych w MySQL i SQL Server, REAL w SQLite. Przecinek dziesiętny, np. 1,5 – typowy dla polskich eksportów – sprawia, że kolumna pozostaje tekstowa. |
| true / false (dowolna wielkość liter) | BOOLEAN z TRUE/FALSE w PostgreSQL i MySQL, BIT z 1/0 w SQL Server, INTEGER z 1/0 w SQLite. |
| Daty w formacie YYYY-MM-DD | DATE z wartościami w cudzysłowie, np. '2026-03-01'; TEXT w SQLite. Daty z godziną i inne formaty dat pozostają tekstem. |
- Nazwy tabel i kolumn są cytowane dokładnie w zapisanej postaci, więc spacje, słowa zastrzeżone i nazwy z polskimi znakami działają:
"order date"w PostgreSQL i SQLite, `order datew MySQL,[order date]` w SQL Server. Znaki cudzysłowu wewnątrz nazwy są podwajane. - W wartościach apostrof jest podwajany (
O'Brienstaje się'O''Brien'). W MySQL podwajane są też ukośniki wsteczne, bo MySQL domyślnie traktuje\jako znak ucieczki. Literały SQL Server dostają przedrostekN, dzięki czemu tekst Unicode zostaje zachowany. - Podziały wiersza wewnątrz wartości CSV w cudzysłowie pozostają wewnątrz literału tekstowego SQL.
- Znaków NUL większość baz danych nie potrafi przechować; są usuwane, a narzędzie podaje ich liczbę.
Rozwiązywanie problemów
- Skrypt ma tylko jedną kolumnę. Ogranicznik został źle rozpoznany; ustaw go w sekcji Ustawienia importu i otwórz plik ponownie.
- Kolumna liczbowa dostała typ TEXT. Co najmniej jedna wartość nie jest zwykłą liczbą, np.
12 kg,1,5lub007. Znajdziesz ją w przeglądarce CSV albo poprawisz kolumnę w narzędziu Czyszczenie CSV. - UPSERT kończy się błędem brakującego ograniczenia.
ON CONFLICTiON DUPLICATE KEYdziałają tylko wtedy, gdy tabela docelowa ma klucz główny lub indeks unikatowy na kolumnach kluczowych. Dodaj indeks do istniejącej tabeli albo pozwól, by klucz utworzyła opcja Dodaj CREATE TABLE. - MySQL lub SQL Server odrzuca PRIMARY KEY. Kolumna kluczowa, która pozostaje tekstowa, jest tworzona jako
TEXT(MySQL/MariaDB) lubNVARCHAR(MAX)(SQL Server), a żadna z tych baz nie potrafi w pełni indeksować takich typów. Utwórz tabelę samodzielnie z kluczem typuVARCHAR, a potem wyłącz Dodaj CREATE TABLE. - SQL Server zgłasza, że tabela już istnieje. Skrypty dla SQL Server używają zwykłego
CREATE TABLE. Wyłącz Dodaj CREATE TABLE, aby wczytać dane do istniejącej tabeli, albo włącz Najpierw dodaj DROP TABLE IF EXISTS, aby ją zastąpić. - Skrypt zatrzymuje się w połowie. Komunikat błędu bazy danych wskazuje instrukcję, która się nie powiodła; najczęstsze przyczyny to zduplikowany klucz albo wartość niepasująca do typu kolumny istniejącej tabeli. Sprawdź plik narzędziem Walidacja CSV i uruchom skrypt ponownie.
Duże pliki i limity
Pliki do 25 MB, 100 000 wierszy lub 2 mln komórek otwierają się z podglądem na żywo. Większe pliki są konwertowane strumieniowo: podgląd pokazuje pierwsze 200 wierszy, plik jest odczytywany dwukrotnie we fragmentach (raz, aby poznać typy i szerokości kolumn, i drugi raz, aby zapisać skrypt), a pobrany plik obejmuje wszystkie wiersze. Pojedynczy skrypt może mieć najwyżej 4 GB.
Konwersja odbywa się w tle w tej karcie, więc strona cały czas reaguje, a Anuluj przerywa pracę. Plik CSV nigdy nie jest wysyłany na serwer. Aby zamiast skryptu dostać gotowy plik bazy danych, użyj narzędzia CSV do SQLite.
Przykład
Lista klientów z identyfikatorem z zerem wiodącym, nazwiskiem zawierającym apostrof i przecinek oraz pustym planem, przekonwertowana z ustawieniami domyślnymi i nazwą tabeli customers. Przy opcji Rozpoznawaj liczby i true/false kolumna signup_date dostaje typ DATE, monthly_fee – NUMERIC z wartością 29.00 bez cudzysłowów, a active – BOOLEAN z TRUE/FALSE, natomiast customer_id pozostaje TEXT.
customer_id,name,signup_date,plan,monthly_fee,active 00412,"O'Brien, Kate",2026-03-01,pro,29.00,true 00413,Luis Ortega,2026-03-04,,0,false
BEGIN;
CREATE TABLE IF NOT EXISTS "customers" (
"customer_id" TEXT,
"name" TEXT,
"signup_date" TEXT,
"plan" TEXT,
"monthly_fee" TEXT,
"active" TEXT
);
INSERT INTO "customers" ("customer_id", "name", "signup_date", "plan", "monthly_fee", "active") VALUES
('00412', 'O''Brien, Kate', '2026-03-01', 'pro', '29.00', 'true'),
('00413', 'Luis Ortega', '2026-03-04', NULL, '0', 'false');
COMMIT;Pytania i odpowiedzi
Dlaczego domyślnie każda kolumna ma typ TEXT?
CSV nie ma typów, a błędne zgadywanie powoduje utratę danych: identyfikator 00412 zapisany jako liczba całkowita staje się 412. Tekst wczytuje dokładnie to, co jest w pliku. Wybierz Rozpoznawaj liczby i true/false, gdy chcesz mieć kolumny liczbowe, logiczne i DATE.
Które bazy danych mogą uruchomić skrypt?
PostgreSQL, MySQL i MariaDB, SQLite oraz SQL Server – każda z własnym sposobem cytowania identyfikatorów, zabezpieczania tekstu, zapisu wartości logicznych i składnią UPSERT. Przed pobraniem wybierz właściwą Baza danych; skrypt napisany dla jednej z nich nie zadziała w pozostałych.
Czy narzędzie może wygenerować polecenia COPY lub LOAD DATA zamiast INSERT?
Nie. Skrypt używa standardowych instrukcji INSERT, UPSERT, UPDATE lub DELETE. Przy bardzo dużych importach rozważ wbudowane narzędzie do masowego ładowania danych w Twojej bazie, np. COPY w PostgreSQL lub LOAD DATA w MySQL, które odczytuje CSV bezpośrednio.