Konwerter CSV na SQL
Zamień poprawnie zacytowany CSV na bezpieczniejszy skrypt MySQL z CREATE TABLE i INSERT.
-
1Wprowadź dane
Wpisz treść, wklej tekst lub załaduj plik z dysku. -
2Kliknij przycisk
Narzędzie natychmiast przetworzy Twoje dane w przeglądarce. -
3Pobierz wynik
Skopiuj gotowy tekst lub zapisz plik na urządzeniu.
return "Wynik gotowy w 0.1s";
}
Parser obsługuje pola w cudzysłowach, przecinki i rekordy wieloliniowe. Puste pola oraz tekst NULL przy wnioskowaniu stają się NULL. Literały są escapowane dla MySQL; przed importem zawsze sprawdź wynik.
Oceń to narzędzie:
Powiązane narzędzia
Inne narzędzia, które mogą Ci się przydaćKonwerter CSV na SQL — od pliku tabelarycznego do instrukcji INSERT
Konwerter CSV na SQL odczytuje nagłówki i rekordy z danych rozdzielanych przecinkiem, średnikiem albo tabulatorem, a następnie buduje skrypt MySQL. Może dołączyć definicję CREATE TABLE i wygenerować osobne lub zbiorcze instrukcje INSERT. Interfejs działa online, lecz komponent nie łączy się z docelową bazą i nie wykonuje wyniku.
Wklej dane razem z pierwszym rekordem zawierającym nazwy pól. Parser korzysta z reguł CSV, dlatego przecinek wewnątrz pola należy otoczyć cudzysłowami, a cudzysłów zapisać podwójnie. Obsługiwane są także zakończenia linii CRLF oraz tekst obejmujący kilka linii. Jeśli chcesz najpierw obejrzeć tabelę bez generowania poleceń, użyj przeglądarki CSV online.
Jak parser rozpoznaje rekordy, cudzysłowy i wielolinie
Rekord nie jest dzielony prostym wyszukiwaniem znaku nowej linii. Strumieniowy parser czyta kompletne pola, więc wartość "Warszawa, Polska" pozostaje jedną komórką, a opis zapisany w cudzysłowie może zawierać przejście do następnego wiersza. Puste fizyczne linie są pomijane, lecz puste pole w rekordzie pozostaje na swojej pozycji. Każdy rekord musi mieć dokładnie tyle pól, ile nagłówek; różnica zatrzymuje konwersję zamiast przesunąć dane do niewłaściwych kolumn.
Nagłówki są normalizowane do konserwatywnych identyfikatorów ASCII dozwolonych w MySQL. Spacje i znaki specjalne stają się podkreśleniami, nazwa zaczynająca się cyfrą otrzymuje bezpieczny prefiks, a duplikaty po normalizacji dostają kolejne sufiksy. To zabezpiecza składnię, ale przed importem warto sprawdzić, czy nazwy odpowiadają schematowi docelowemu.
Wnioskowanie typów i sposób tworzenia tabeli
Po włączeniu opcji wnioskowania wszystkie niepuste wartości w danej kolumnie są analizowane łącznie. Dzięki temu pojedyncze słowo nie wymusi typu liczbowego, a liczba całkowita w kolumnie z kwotami nie zablokuje typu dziesiętnego. Wartość NULL oraz puste pole nie wpływają na wybór typu. Numery z zerem wiodącym, identyfikatory z nietypowym formatem i liczby wykraczające poza bezpieczny zakres są zachowywane jako tekst.
| Dane w kolumnie | Generowany typ | Ważna uwaga |
|---|---|---|
same true/false | TINYINT(1) | w INSERT powstaje 1 albo 0 |
| liczby całkowite w zakresie | BIGINT | zera wiodące kierują kolumnę do tekstu |
| liczby z częścią ułamkową | DECIMAL(p,s) | precyzja i skala wynikają z danych |
| krótki tekst | VARCHAR(255) | dobry dla nazw i kodów |
| długi lub wieloliniowy tekst | TEXT / LONGTEXT | chroni przed obcięciem do 255 znaków |
Jeśli wyłączysz wnioskowanie, wszystkie kolumny zostaną potraktowane tekstowo. To rozsądny wybór dla kodów pocztowych, numerów katalogowych i identyfikatorów, których zapis ma znaczenie. Bardziej ręczną kontrolę nad pojedynczym poleceniem zapewnia generator instrukcji SQL INSERT.
Pojedyncze i zbiorcze INSERT-y
Tryb pojedynczy tworzy jedno polecenie na rekord. Jest czytelny, ułatwia znalezienie błędnego wiersza i pozwala wykonywać fragmenty skryptu. Tryb zbiorczy używa jednej listy VALUES (...), (...), więc zwykle zmniejsza narzut importu. Bardzo duży wsad nadal warto podzielić na transakcje i uwzględnić limit rozmiaru pakietu serwera. Sam konwerter ogranicza wejście do 1 MB i 5000 rekordów, aby przypadkowe wklejenie ogromnego pliku nie przeciążyło żądania.
- Wybierz separator zgodny z plikiem i wklej nagłówek wraz z rekordami.
- Ustaw nazwę tabeli, zdecyduj o
CREATE TABLEi wnioskowaniu typów. - Wybierz pojedyncze albo zbiorcze polecenie
INSERT. - Skopiuj wynik i przejrzyj typy, nazwy, wartości
NULLoraz kodowanie. - Najpierw uruchom skrypt w bazie testowej i transakcji, dopiero potem w środowisku docelowym.
Escaping wartości i ograniczenie ryzyka SQL injection
Wynik jest przeznaczony dla MySQL: identyfikatory są ograniczone do liter, cyfr i podkreśleń oraz ujmowane w backticki. W tekstach podwajane są apostrofy, a backslash, bajt zerowy, znak nowej linii, powrót karetki i znak Control-Z otrzymują bezpieczną reprezentację. Dzięki temu pole takie jak O'Brien nie kończy literału, a wieloliniowy opis nie rozrywa instrukcji. Tekst NULL staje się słowem SQL NULL tylko przy włączonym wnioskowaniu; po jego wyłączeniu pozostaje tekstem.
Po skopiowaniu możesz uporządkować zapis w formaterze SQL. Sprawdź także docelową składnię: backticki i TINYINT(1) są typowe dla MySQL, podczas gdy PostgreSQL wymaga dostosowania identyfikatorów i części typów. Konwerter nie dodaje kluczy głównych, indeksów, ograniczeń UNIQUE, relacji ani ustawień silnika i kodowania — te elementy wynikają z projektu bazy, nie z próbki CSV.
Kontrola jakości przed importem
Najczęstsze problemy nie wynikają z samego escapingu, lecz z semantyki: przecinek dziesiętny bywa pomylony z separatorem, data może mieć różne formaty, a pusty ciąg nie zawsze oznacza brak wartości. Porównaj liczbę rekordów i kolumn pokazaną nad wynikiem z plikiem źródłowym. Zwróć uwagę na kodowanie UTF-8, nazwy po normalizacji, maksymalną długość tekstu i dokładność kwot. Jeżeli dalszy proces wymaga JSON, dane możesz niezależnie sprawdzić w konwerterze CSV na JSON.
Najczęściej zadawane pytania
Czy przecinek i nowa linia mogą znajdować się wewnątrz pola?
Tak. Pole musi być ujęte w cudzysłowy zgodnie z CSV. Parser czyta rekordy wieloliniowe i nie rozdziela ich prostym wyrażeniem po znaku nowej linii.
Jak są traktowane puste pola oraz słowo NULL?
Puste pole daje NULL. Przy włączonym wnioskowaniu także tekst bez rozróżnienia wielkości liter NULL daje wartość SQL NULL; po wyłączeniu wnioskowania jest cytowanym tekstem.
Czy wynik jest odporny na SQL injection?
Identyfikatory są normalizowane, a tekst escapowany dla MySQL, co blokuje zamknięcie literału przez apostrof lub backslash. Mimo to wynik jest wykonywalnym skryptem i wymaga przeglądu; w kodzie aplikacji właściwą ochroną pozostają parametry.
Dlaczego kod pocztowy albo numer z zerem wiodącym jest tekstem?
Zapis 00123 nie jest uznawany za liczbę, ponieważ konwersja usunęłaby istotne zera. Kolumna otrzymuje typ tekstowy i zachowuje oryginalną wartość.
Czy wygenerowany SQL działa w PostgreSQL lub SQLite?
Nie bez gwarancji. Skrypt celuje w MySQL i używa jego identyfikatorów oraz typów. Dane i apostrofy są przenośne w dużej części, lecz definicję tabeli trzeba dopasować do wybranego silnika.