CSV → SQL コンバーター

CSVをSQL INSERT文に変換。CREATE TABLEも追加でき、MySQL・PostgreSQL・SQLiteに対応。先頭のゼロを保持し、MySQLのバックスラッシュをエスケープ、引用符フィールドとNULLも処理。

  • ブラウザ内で処理
  • データはブラウザ外に出ません
  • 無料 · 登録不要
MySQL、PostgreSQL、SQLite の引用符と CREATE TABLE の型を選びます。変更すると現在の CSV をすぐに変換します。MySQL では文字列値のバックスラッシュも二重にします。
既定のテーブル名は my_table で、空欄でもこの名前を使います。名前全体を1つの識別子として引用符で囲みます。編集を止めて0.3秒後に出力を更新します。
バッチ INSERT は1文に複数行を書き、個別 INSERT はデータ行ごとに1文を書きます。変更すると現在の CSV をすぐに変換します。
INSERT の前に CREATE TABLE を追加します。列の値から型を推定し、キーや制約は追加しません。SQL を実行する前に型を確認してください。
UTF-8 の CSV ファイルを「CSV 入力」に読み込み、現在のオプションで変換します。ファイルはこのブラウザー内で読み取り、CSV データは送信しません。
ヘッダーとデータ行を含むカンマ区切りの CSV を貼り付けます。入力を止めて0.3秒後に出力を更新します。余分なセルには名前付きの列を追加し、不足したセルは NULL にします。
生成された SQL 文をすべてコピーします。選択時の CREATE TABLE も含みます。空の結果はコピーできません。
SQL 文がここに表示されます。
例・詳しい説明・よくある質問 実際の出力つきの例、ほかのツールとの違い、よくある質問。

値の書き方

  • 空のフィールドは NULL になります。
  • 空でないセルがすべて普通の数値(42、-7、19.90)の列は引用符なしで出力します。普通の数値とは、先頭のゼロ・+・指数がなく、15 桁以内のものです。
  • それ以外の列は数値も含めてすべて引用符付きの文字列にするので、02134、1e5、20 桁のカード番号も元の文字のまま残ります。列が数値型なら、MySQL・PostgreSQL・SQLite はいずれも引用符付きの数値を変換して格納します。
  • 単一引用符はどの方言でも 2 つ重ねます(O”Brien)。MySQL ではバックスラッシュも 2 つにします。MySQL の既定の SQL モードは文字列中の \n を改行として読むためです(MySQL 8.4 Reference Manual, String Literals、表 11.1)。standard_conforming_strings が有効な PostgreSQL(9.1 以降の既定、PostgreSQL 4.1.2.1)と SQLite は、バックスラッシュをそのまま保存します。
  • ヘッダーより多いセルには column_3、column_4 などの列を追加し、ステータス行に表示します。短い行は NULL で埋めます。

例:引用符・先頭のゼロ・空のフィールド

入力(SQLite、バッチモード、テーブル名 customers):

id,name,zip,note
1,"O'Brien, Pat",02134,
2,Lee,10001,"path C:\new"
INSERT INTO "customers" ("id", "name", "zip", "note") VALUES
(1, 'O''Brien, Pat', '02134', NULL),
(2, 'Lee', '10001', 'path C:\new');

引用符付きの “O’Brien, Pat” はカンマを含んだまま、空の note は NULL になります。02134 があるため zip 列は文字列の列になり、10001 も引用符で囲みます。SQLite 3 で実行すると、SELECT zip FROM customers は 02134 と 10001 を返します。

同じ入力で MySQL を選ぶとバックスラッシュが 2 つになり、保存される値は path C:\new のままです。

id,name,zip,note
1,"O'Brien, Pat",02134,
2,Lee,10001,"path C:\new"
INSERT INTO `customers` (`id`, `name`, `zip`, `note`) VALUES
(1, 'O''Brien, Pat', '02134', NULL),
(2, 'Lee', '10001', 'path C:\\new');

サーバーの sql_mode に NO_BACKSLASH_ESCAPES が入っている場合、バックスラッシュは普通の文字です。そのサーバーには PostgreSQL か SQLite の出力を使ってください。

例:CREATE TABLE

CREATE TABLE を追加を選ぶと、列の型を値から決めます。整数は INTEGER(MySQL は INT、2,147,483,647 を超えると BIGINT)、小数点を含む数値は DOUBLE PRECISION(MySQL は DOUBLE、SQLite は REAL)、それ以外は TEXT です。PostgreSQL の例:

order_id,amount,paid_at
1001,19.90,2026-09-30
1002,5,
CREATE TABLE "orders" ("order_id" INTEGER, "amount" DOUBLE PRECISION, "paid_at" TEXT);
INSERT INTO "orders" ("order_id", "amount", "paid_at") VALUES
(1001, 19.90, '2026-09-30'),
(1002, 5, NULL);

型が重要な場合は実行前に直してください。金額は NUMERIC / DECIMAL、paid_at のような日付は DATE や TIMESTAMP が適しています。主キーや制約は付けません。

例:ヘッダーよりセルが多い行

sku,qty
A-1,3,fragile
B-2,5
INSERT INTO "stock" ("sku", "qty", "column_3") VALUES ('A-1', 3, 'fragile');
INSERT INTO "stock" ("sku", "qty", "column_3") VALUES ('B-2', 5, NULL);

追加した column_3 はステータス行に表示されます。正式な列名にしたい場合はヘッダー行で名前を付けてください。

制限事項

  • 区切り文字はカンマだけで、1 行目は常にヘッダーです。セミコロンやタブ区切りのファイルは先に変換してください。
  • 型は文字列から推測するだけです。日付、真偽値、1e5 は文字列として扱います。
  • テーブル名と列名は 1 つの識別子として囲むので、public.users はドットを含む 1 つの名前になります。
  • 大きなファイルもブラウザーのタブ内で一度に変換します。数百万行ならデータベースの一括読み込み(LOAD DATA、COPY、.import)を使ってください。

FAQ

このツールは何をしますか?

CSV データを SQL の INSERT 文に変換し、必要なら CREATE TABLE 文も出力します。ヘッダー行が列名になり、各データ行が値の組になります。値は選んだ方言に合わせて引用符で囲み、エスケープします。

対応している SQL 方言は?

MySQL(識別子はバッククォート、文字列中のバックスラッシュは 2 つに)、PostgreSQL と SQLite(識別子は二重引用符、バックスラッシュはそのまま)です。INSERT の構文は 3 つとも同じです。

NULL はどう扱われますか?

空のフィールドは引用符なしの NULL になります。空白だけのフィールドは文字列で、NULL ではありません。空文字列 '' は出力できません。

02134 は引用符付きなのに 10001 は付かないことがあるのはなぜ?

列のすべての空でないセルが普通の数値(先頭のゼロなし、+ や指数なし、15 桁以内)のときだけ、その列を数値として出力します。02134 は普通の数値ではないので zip 列全体を引用符で囲み、先頭のゼロが残ります。

データはサーバーに送信されますか?

いいえ。変換はすべてブラウザー内の JavaScript で行われ、CSV データは送信されません。