CSV ファイルを開くか貼り付けて、データベース と ステートメント を選ぶと、オプションの横にスクリプトが表示されます。既定では、TEXT 型の列による CREATE TABLE IF NOT EXISTS と、100 行ずつの INSERT をまとめた PostgreSQL のトランザクションになるため、00412 は '00412' のまま保たれます。テーブルに数値、真偽値、DATE の列を作りたい場合は、数値と true/false を判定する を選んでください。ファイルはブラウザー内で変換され、アップロードされることはありません。
CSV を SQL に変換する手順
.csv、.tsv、.txtファイルを開くか、ツールにドロップするか、行を貼り付けます。区切り文字は自動で判定されます。必要に応じて、読み込み設定 で区切り文字、見出し行、Windows-1252 などの従来の文字コードを設定してください。- データベース を PostgreSQL、MySQL / MariaDB、SQLite、SQL Server から選びます。テーブル名 を確認してください。初期値はファイル名で、空白や記号はアンダースコアに置き換えられます(
sales report.csvはsales_reportになります)。 - ステートメント を選びます。UPSERT、UPDATE、DELETE の場合は、行を特定する キー列 にチェックを入れます。
- プレビューを確認してから、コピー を選ぶか
.sqlファイルをダウンロードし、データベースのクライアントで実行します(例:psql -f data.sql)。
多数のファイルを同じ設定でスクリプトにするには、一括変換:複数のファイルを変換 を選びます。各ファイルが順に変換され、スクリプトはまとめて 1 つの ZIP としてダウンロードされます。
ステートメントとオプション
| INSERT | 複数行の INSERT INTO … VALUES ステートメントです。1 つの INSERT あたりの行数 で、1 つのステートメントにまとめる行数を指定します(1~1,000、既定は 100)。SQL Server では 1,000 行を超えるとエラーになります。 |
|---|---|
| UPSERT(挿入または更新) | 行ごとに 1 つのステートメントで、その行を挿入するか、同じキーを持つ既存の行を更新します。PostgreSQL と SQLite では ON CONFLICT (…) DO UPDATE SET … = excluded.…、MySQL では ON DUPLICATE KEY UPDATE、SQL Server では MERGE を使います。対象のテーブルには、キー列に主キーまたは一意インデックスが必要です。 |
| UPDATE | すべての行について UPDATE … SET … WHERE key = … を書き出します。キー列は変更されません。すべての列がキーの場合は更新するものがないため、ステートメントは書き出されません。 |
| DELETE | すべての行について DELETE FROM … WHERE key = … を書き出します。キーの値が空の場合は IS NULL になります。 |
| キー列 | UPSERT、UPDATE、DELETE には必須です。WHERE のキーがない状態でこれらのステートメントが書き出されることはありません。CREATE TABLE を追加 がオンの場合、キー列は NOT NULL かつ PRIMARY KEY になります。 |
| CREATE TABLE を追加 | 既定でオンです。CREATE TABLE IF NOT EXISTS を書き出します(SQL Server の場合や DROP の後では、通常の CREATE TABLE)。 |
| 先頭に DROP TABLE IF EXISTS を追加 | 同じ名前の既存のテーブルを置き換えます。既定ではオフです。スクリプトを実行すると、元のテーブルとそのデータは失われます。 |
| トランザクションで囲む | 既定でオンです。BEGIN; … COMMIT; で囲みます(MySQL では START TRANSACTION;、SQL Server では BEGIN TRANSACTION;)。 |
| 空のセルを NULL として出力 | 既定でオンです。オフにすると、空のセルは '' として書き出されます。 |
列の型と引用符の付け方
すべての値を文字列のまま扱う(既定)では、すべての列が TEXT(SQL Server では NVARCHAR(MAX))になり、すべての値が引用符付きの文字列リテラルになるため、先頭のゼロ、桁数の多い ID、変わった形式の日付もそのまま読み込まれます。
数値と true/false を判定する では、空でないすべての値が当てはまる場合にだけ、列に型が付きます。
| 整数 | INTEGER、または 9 桁を超える値がある場合は BIGINT になります。値は引用符なしで書き出されます。先頭がゼロの数値や 9,007,199,254,740,991 を超える数値がある列は、文字列のままです。 |
|---|---|
| 小数(有効数字 15 桁まで) | PostgreSQL では NUMERIC、MySQL と SQL Server ではデータに合わせた桁数の DECIMAL(p,s)、SQLite では REAL になります。1,5 のように小数点にコンマを使った値がある列は、文字列のままです。 |
| true / false(大文字・小文字を問わない) | PostgreSQL と MySQL では真偽値型の BOOLEAN になり、値は TRUE/FALSE で書き出されます。SQL Server では BIT 型、SQLite では INTEGER 型になり、どちらも値は 1/0 で書き出されます。 |
| YYYY-MM-DD 形式の日付 | '2026-03-01' のような引用符付きの値の DATE になります。SQLite では TEXT です。日時やそれ以外の日付の形式は文字列のままです。 |
- テーブル名と列名は書かれたとおりに引用符で囲むため、空白、予約語、ラテン文字以外の名前も使えます。PostgreSQL と SQLite では
"order date"、MySQL では `order date、SQL Server では[order date]` となります。名前の中の引用符は 2 つ重ねます。 - 値の中の単一引用符は 2 つ重ねます(
O'Brienは'O''Brien'になります)。MySQL は既定で\をエスケープ文字として扱うため、MySQL 用ではバックスラッシュも 2 つ重ねます。SQL Server のリテラルには、Unicode の文字列が保たれるようNの接頭辞が付きます。 - CSV の引用符で囲まれた値の中の改行は、SQL の文字列リテラルの中にそのまま残ります。
- NUL 文字はほとんどのデータベースで保存できないため削除され、その件数が表示されます。
SQL スクリプトの実行に失敗する場合
- スクリプトがすべて 1 つの列になっている。 区切り文字の判定が誤っています。読み込み設定 で指定し、ファイルを開き直してください。
- 数値の列が TEXT になった。
12 kg、1,5、007など、単純な数値でない値が少なくとも 1 つあります。CSV ビューアー で見つけるか、CSV データのクリーニング でその列を修正してください。 - UPSERT が制約の不足で失敗する。
ON CONFLICTとON DUPLICATE KEYは、対象のテーブルのキー列に主キーまたは一意インデックスがある場合にだけ機能します。既存のテーブルにインデックスを追加するか、CREATE TABLE を追加 でキーを作成してください。 - MySQL や SQL Server で PRIMARY KEY がエラーになる。 文字列のままのキー列は
TEXT(MySQL/MariaDB)またはNVARCHAR(MAX)(SQL Server)として作成されますが、どちらのデータベースもこれらの型の全体にはインデックスを作成できません。VARCHARのキーでテーブルを自分で作成してから、CREATE TABLE を追加 をオフにしてください。 - SQL Server でテーブルがすでに存在すると表示される。 SQL Server 用のスクリプトでは、通常の
CREATE TABLEを使います。既存のテーブルに読み込むには CREATE TABLE を追加 をオフにし、置き換えるには 先頭に DROP TABLE IF EXISTS を追加 をオンにしてください。 - スクリプトが途中で止まる。 データベースのエラーに、失敗したステートメントが示されます。よくある原因は、キーの重複や、既存のテーブルの列の型に合わない値です。CSV のチェック でファイルを確認してから、スクリプトをもう一度実行してください。
大きなファイルと制限
25 MB、10万行、200万セルまでのファイルは、リアルタイムのプレビュー付きで開きます。それより大きなファイルはストリーミング方式で変換します。プレビューには先頭 200 行が表示され、ファイルを分割して 2 回読み込み(1 回目で列の型と幅を確認し、2 回目でスクリプトを書き出す)、ダウンロードにはすべての行が含まれます。1 つのスクリプトは 4 GB までです。
変換はこのタブ内のバックグラウンドのワーカーで実行されるため、ページの操作が止まることはなく、キャンセル で中止できます。CSV がサーバーに送信されることはありません。スクリプトではなく、すぐに使えるデータベース ファイルが必要な場合は、CSV を SQLite に変換 を使ってください。
例:顧客リストを PostgreSQL の INSERT 文に変換
先頭がゼロの ID、アポストロフィとコンマを含む名前、空のプランを含む顧客リストを、既定の設定とテーブル名 customers で変換した例です。数値と true/false を判定する を選ぶと、signup_date は DATE に、monthly_fee は引用符なしの 29.00 を持つ NUMERIC に、active は TRUE/FALSE を持つ BOOLEAN になり、customer_id は 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;よくある質問
既定ですべての列が TEXT になるのはなぜですか?
CSV には型がなく、推測を誤るとデータが失われるからです。00412 のような ID を整数として保存すると 412 になってしまいます。文字列にすれば、ファイルの内容がそのまま読み込まれます。数値、真偽値、DATE の列が必要な場合は、数値と true/false を判定する を選んでください。
スクリプトはどのデータベースで実行できますか?
PostgreSQL、MySQL と MariaDB、SQLite、SQL Server です。識別子の引用符、文字列のエスケープ、真偽値、UPSERT の構文は、それぞれのデータベースに合わせて書き出されます。ダウンロードする前に対応する データベース を選んでください。あるデータベース用のスクリプトは、ほかのデータベースではそのまま使えません。
INSERT の代わりに COPY や LOAD DATA のコマンドを生成できますか?
できません。スクリプトでは、標準的な INSERT、UPSERT、UPDATE、DELETE のステートメントを使います。非常に大量のデータを読み込む場合は、PostgreSQL の COPY や MySQL の LOAD DATA など、CSV を直接読み込むデータベース独自の一括読み込み機能を検討してください。