How to use it
- Paste the CSV or upload it. The first row should be the column names.
- Pick your database and a table name, then hit Generate SQL.
- Check the column table. Rename columns, change types or untick NULL. The SQL updates as you go.
- Copy it, or download the .sql file and run it with your usual client.
How the types are picked
Every filled value in a column is checked, not just the first few rows, because the row that breaks a load is usually row 40,000.
- Integer when every value is a whole number. It moves up to BIGINT past 2,147,483,647, and to a 38-digit DECIMAL past that.
- Decimal with a precision and scale wide enough for the longest value on both sides of the point. No silent rounding.
- Boolean only for true and false. Yes/no stays text, because guessing there goes wrong.
- Date and timestamp only for real ISO dates like 2026-01-05. 05/01/2026 could be May or January, so it stays text. Fix those first with the date normalizer.
- Text for everything else, including codes with leading zeros like pincodes. VARCHAR lengths round up to a sensible size.
The details that usually break
Quotes inside values are doubled, so O'Neil goes in as 'O''Neil'. MySQL also gets its backslashes escaped, since it treats them as escape characters by default. SQL Server strings are written as N'...' so non-English text survives, and its INSERTs never exceed 1,000 rows per statement. Column names are quoted the way each database expects, so a column called "order" or "group" won't collide with a keyword.
Before you load. If the file came from somewhere you don't control, run it through the CSV profiler first. Five minutes there saves an afternoon of rejected rows.
Questions
Which databases does it support?
PostgreSQL, MySQL (and MariaDB), SQLite and SQL Server. Each gets its own identifier quoting, string escaping, type names and transaction syntax. SQL Server batches are capped at 1,000 rows, which is that database's limit for one VALUES list.
How are types chosen?
A column is an integer only if every filled value is a whole number without leading zeros. Decimals get a precision and scale that fit the widest value. Dates need to be real calendar dates in YYYY-MM-DD form; anything else stays text. When in doubt it picks text, because a wrong numeric type fails the load and text never does. You can change any type before copying.
Why is my number column showing as text?
Usually one value isn't a plain number: "1,200" with a comma, "N/A", a currency symbol, or a code like 060001 where the leading zero matters. Run the file through the CSV profiler to find which one, or just change the type by hand.
Is there a size limit?
Big files work. The preview stops at 300 KB so the page stays fast, but Copy and Download always give you the whole script.
Is my CSV uploaded?
No. The SQL is generated in your browser. Nothing is sent to a server.