L LocalUse Source

CSV to SQL

Drop a CSV and get a table definition and the inserts to fill it. Column types are inferred per dialect, NOT NULL is applied where the data has no gaps, and values are escaped properly rather than concatenated.

Table name
Dialect
Delimiter
Rows per INSERT
Row limit
CSV
Output

Output appears here as you type.

Runs entirely in your browser. Nothing you paste here is uploaded or stored.

Questions

Is my file uploaded anywhere?

No. Parsing happens in your browser as a pure function, and the page is served with a Content-Security-Policy of connect-src ‘none’, so the browser refuses to let it open a network connection at all. That is what makes it safe to drop a real export — the kind with customer names and email addresses in it.

Why is my zip code column a string rather than a number?

Because a leading zero carries meaning. 01234 parsed as a number becomes 1234, and the zip code is gone. Any value with a leading zero stays a string, as do integers beyond the range JavaScript can represent exactly — which is where snowflake ids and long account numbers live.

How are the column types chosen?

From the values, per dialect. Integers become BIGINT (INTEGER on SQLite), decimals DOUBLE PRECISION, detected timestamps TIMESTAMPTZ or DATETIME, UUIDs a native UUID column on Postgres and CHAR(36) on MySQL. On MySQL a bounded string becomes VARCHAR rather than TEXT so it can be indexed.

Are the values escaped safely?

Single quotes are doubled, nulls emitted as NULL rather than an empty string, and numbers and booleans written unquoted in each dialect’s form. That said, generated SQL is for loading data you already have — do not build a habit of concatenating untrusted input into statements.

More convert tools