ToolActToolAct

CSV to SQL 変換ツール

CSV ファイルをアップロードするかデータを貼り付けて、SQL INSERT 文に変換

CSV ファイルをここにドロップするか、クリックして選択

CSV を SQL に変換とは?

CSV を SQL に変換は、CSV(カンマ区切り値)形式のデータを SQL INSERT 文に変換するオンラインデータ変換ツールです。データベースへのインポートが容易になります。

CSV は一般的な表形式データで、スプレッドシートやデータエクスポートに広く使用されています。SQL はリレーショナルデータベースの標準的な照会言語であり、INSERT 文はデータベーステーブルにデータを挿入するために使用されます。

このツールを使用すると、CSV データを実行可能な SQL 文に迅速に変換でき、カスタムテーブル名、フィールド名、引用符スタイルをサポートし、データ移行やインポート操作を容易にします。

使い方

使い方

  1. 入力ボックスにCSVデータを貼り付けるか入力、もしくはCSVファイルをアップロードしてください
  2. テーブル名を設定してください(デフォルトは table_name)
  3. 適切な区切り文字を選択してください(デフォルトはカンマ)
  4. 最初の行をフィールド名として使うかどうかを選択してください
  5. 右側にSQL INSERT文が生成されます

インポート時の安全対策

  • 実行前に、生成されたINSERT文のテーブル名、カラム順、エスケープ、NULL値、数値の書式を確認してください。
  • まず少量のバッチで実行し、データベースが対応している場合は本番インポートをトランザクションで囲んでください。

利用シーン

小規模なCSVエクスポートからINSERT文を生成するCSV、TSV、テキストテーブルをアップロードし、区切り文字を選んでテーブル名を設定すると、ヘッダー名または自動生成のcol1、col2、col3カラムを使ったSQL INSERT文が出力されます。解析とステートメント生成はすべてブラウザで行われるため、psqlやmysql、マイグレーションツールに貼り付けるまでデータがデバイス外に出ることはありません。
データベーススタイルに合わせた識別子の引用符を選ぶMySQL用のバッククォート、PostgreSQLや標準SQL用のダブルクォート、文字列リテラル用のシングルクォートを切り替えられ、オプションでVARCHAR(255)カラムのシンプルなCREATE TABLE文も含められます。中間ステップとして活用し、ターゲットのデータベースバージョンでSQLを検証してから本番に進みましょう。
シードデータを準備しつつSQLの制限を把握するツールはシングルクォートや値内の二重引用符をエスケープし、4種類の区切り文字に対応しています。デモやローカルフィクスチャ、管理画面の修正ドラフトに向いていますが、データ型や制約、インデックス、トランザクション、COPYやLOAD DATA、複数行VALUESバッチングなどのデータベース固有のバルクロード構文は推測しません。
共有データベースへのシード投入にIF NOT EXISTSガードを追加する生成されたINSERTバッチをBEGIN/COMMITトランザクションで囲むか、手動のDELETE/INSERTパターンと組み合わせることで、開発やステージングスキーマでシードを再実行しても行が重複しないようにします。すべての解析がローカルで行われるため、顧客やステージングデータを外部サービスに再アップロードせずにシードを繰り返し改善できます。
実際のカラムに合わせてVARCHAR(255)を調整するCREATE TABLEドラフトはすべてのカラムにVARCHAR(255)を使用するため、長い説明はTEXTに、金額はDECIMAL(p,s)に、タイムスタンプはTIMESTAMPに変更してから本番でINSERTを実行してください。生成されたカラム型を実際のスキーマと照合し、ドラフトをそのまま適用しないようにしましょう。空セルは空文字列ではなくNULLとして扱われます。

仕組み

CSV 入力は RFC 4180 準拠のステートマシンでパースされ(引用符付きフィールド、エスケープされた二重引用符、CRLF/LF の行末を処理)、ANSI SQL の INSERT 文として出力されます。2 つの文法は重複しません:CSV は二重引用符の二重化によるエスケープ("O""Brien")を使用し、SQL は ISO/IEC 9075 に基づき文字列リテラル内のシングルクォートの二重化('O''Brien')を使用します。コンバーターはすべての内部アポストロフィを二重ペアに書き換えてから値をシングルクォートで囲みます。これは MySQL、PostgreSQL、SQLite、SQL Server、Oracle で保証される唯一のエスケープメカニズムです。識別子の引用符は方言固有です:MySQL はバッククォート `users`、PostgreSQL と SQL Server はダブルクォート "users"(引用符付きの場合大文字小文字を区別)、SQLite は両方を受け付けます。ターゲットエンジンに合ったスタイルを選択しないと、大文字小文字のフォールディングによる「unknown column」エラーが発生します。 型推論は意図的に最小限に抑えています。CSV には型メタデータがないためです。オプションの CREATE TABLE ドラフトはすべてのカラムに VARCHAR(255) を出力します。安全ですが最適ではなく、本番環境で実行する前に INT、BIGINT、DECIMAL(p,s)、DATE、TIMESTAMP、TEXT に置き換えるのはユーザーの責任です。空のセルは空文字列 '' ではなく NULL(SQL の三値論理の不在マーカー)として出力されます。ほとんどのスプレッドシートエクスポートが空白フィールドを欠損データとして使用するためです。空文字列の区別が重要な場合は、代わりに型付きローダーを使用してください。user、order、group などの予約語は自動的に引用符で囲まれないため、order という名前のカラムはユーザーが手動でバッククォートで囲まない限り MySQL でパースに失敗します。 大量インポートの場合、単一行 INSERT 文は正しいですが遅いです。MySQL のデフォルト max_allowed_packet は 64 MB で、INSERT INTO t VALUES (...), (...), (...) のような約 1000 行ごとのバッチマルチロウ INSERT は、ネットワークのラウンドトリップとパースのオーバーヘッドにより、通常 1 行 1 文より 5〜10 倍高速です。バッチを BEGIN; ... COMMIT; で囲むことで、データベースは INSERT をステージングしアトミックにコミットできます。これは部分的な挿入が外部キー関係を不整合にする場合に不可欠です。このツールは外部キー、インデックス、主キー制約、AUTO_INCREMENT を推論しないことに注意してください。行データのみを変換するため、受信側のスキーマが既に存在するか、CREATE TABLE ドラフトを実行前に編集する必要があります。数百万行のバルクロードには、データベースネイティブ構文を推奨します:PostgreSQL COPY FROM、MySQL LOAD DATA INFILE、SQL Server bcp。

  • ISO/IEC 9075 に基づく SQL 文字列リテラルのエスケープ:シングルクォートは二重化('O''Brien')。バックスラッシュエスケープではない。
  • 識別子の引用符は異なる:MySQL は `、PostgreSQL/SQL Server は "、SQLite は両方受け付け。
  • 空の CSV セル -> SQL NULL(三値論理)。空文字列 '' ではない。空文字列の区別は失われる。
  • 予約語(order、user、group)は自動引用されない。手動エスケープが必要。
  • 約 1000 行のマルチロウ INSERT バッチは単一行文と比較してスループットが約 5〜10 倍(MySQL max_allowed_packet デフォルト 64 MB)。
  • BEGIN; ... COMMIT; で囲んでアトミックなシード INSERT を実行。部分的な失敗はロールバックされる。
  • 100 万行超のバルクロード:生成された INSERT よりも PostgreSQL COPY、MySQL LOAD DATA INFILE、SQL Server bcp を推奨。

使用例

基本的な CSV → INSERT 文(MySQL バッククォート)

CSV:
id,name,email
1,Alice,alice@example.com
2,Bob,bob@example.com

SQL:
INSERT INTO `users` (`id`, `name`, `email`) VALUES (1, 'Alice', 'alice@example.com');
INSERT INTO `users` (`id`, `name`, `email`) VALUES (2, 'Bob',   'bob@example.com');

CREATE TABLE 付き(PostgreSQL ダブルクォート形式)

CSV:
product_id,price,in_stock
101,29.99,true
102,15.50,false

SQL:
CREATE TABLE "products" (
  "product_id" VARCHAR(255),
  "price"      VARCHAR(255),
  "in_stock"   VARCHAR(255)
);
INSERT INTO "products" ("product_id", "price", "in_stock") VALUES ('101', '29.99', 'true');
INSERT INTO "products" ("product_id", "price", "in_stock") VALUES ('102', '15.50', 'false');
-- ヒント: 本番運用前に VARCHAR(255) を INT / DECIMAL(10,2) / BOOLEAN へ変更してください。

値内のシングルクォートのエスケープ

CSV:
id,note
1,O'Brien signed off
2,It's already done

SQL:
INSERT INTO `notes` (`id`, `note`) VALUES (1, 'O''Brien signed off');
INSERT INTO `notes` (`id`, `note`) VALUES (2, 'It''s already done');
備考: シングルクォートは二重化('')されます。これは SQL 標準のエスケープ方法です。

型推論 - INT / DECIMAL / TEXT

CSV:
user_id,score,bio
1,100,Hello
2,87.5,Long bio text...

推定された型(ヒューリスティック):
  user_id -> INT
  score   -> DECIMAL(10,2)
  bio     -> VARCHAR(255)  (長い内容には TEXT を検討)

SQL プレビュー:
INSERT INTO `students` (`user_id`, `score`, `bio`) VALUES (1, 100, 'Hello');
INSERT INTO `students` (`user_id`, `score`, `bio`) VALUES (2, 87.5, 'Long bio text...');

よくある質問

ツールはどのような種類のSQLを生成しますか?

標準のCREATE TABLE文とINSERT INTO文を生成します。デフォルトの方言は移植性のあるSQLで、MySQL、PostgreSQL、SQLite、MSSQLで型のわずかな調整で動作します。一部のページではターゲット方言を選択してデータ型をカスタマイズできます(VARCHARとTEXT、INTとINTEGERなど)。

列名はどう決まりますか?

「最初の行をヘッダーとする」を有効にすると、CSVの最初の行から決まります。ページではスペースをアンダースコアに置き換え、予約語をクォートで囲んで名前をサニタイズします。ヘッダーを無効にすると、列はcol_1、col_2などになります。

各列のデータ型はどう推測されますか?

ページは値をサンプリングし、適合する最も狭い型を選択します。すべてのセルが整数ならINTEGER、一部が小数ならDECIMAL、最長セルに合わせたVARCHAR(N)、true/falseならBOOLEAN、ISO形式の文字列ならDATE/DATETIMEを選択します。SQLを生成する前に推測された型を上書きできます。

データ内のクォートや特殊文字はどう扱われますか?

文字列値内のシングルクォートは2つ重ねてエスケープされます(O'Brien → 'O''Brien')。バックスラッシュやUnicode文字はそのまま渡されます。これはPostgreSQLのstandard_conforming_strings = onの動作に一致します。MySQLをターゲットにする場合は、MySQLのNO_BACKSLASH_ESCAPESモードに対して結果を確認してください。

なぜNULLは空文字列と異なるのですか?

空のCSVセル('a,,c'など)はSQLのNULLになり、引用された空文字列('a,"",c')は ''になります。ページはこの規則に従います。両方のケースで空文字列として保持したい場合は、「空をNULLとして扱う」をオフにしてください。

データはアップロードされますか?

いいえ。CSVの解析とSQLの生成はブラウザ内で行われます。入出力はページから出ません。生成された結果はSQLスクリプトとして自分でデータベースサーバーにインポートしてください。

生成されたSQLを本番データベースで使用すべきですか?

まずレビューしてください。CREATE TABLE文は既存のスキーマと一致しない可能性があり、INSERTには制約、外部キー、インデックスが含まれません。出発点として編集することをおすすめします。特に主キー、NOT NULL制約、適切なデータ型に注意してください。

関連ツール

CSV to JSON 変換ツール

カスタム区切り文字と最初の行をヘッダーとして使用するオプションをサポートする無料のオンラインCSV to JSONコンバーター。表形式データを素早くJSON形式に変換。

SQL フォーマットツール

オンラインSQLフォーマットツール。コード美化、圧縮、キーワード大文字小文字変換、シンタックスハイライトをサポート。ワンクリックでSQLステートメントを整理し、コード可読性を向上。

Excel to SQL 変換ツール

オンラインExcel to SQLコンバーター。.xlsxおよび.xls形式に対応、複数シート選択対応。スプレッドシートデータをローカルでSQL INSERT文に変換。

JSON フォーマットツール

オンラインJSONフォーマットツール。シンタックスハイライト、エラー検出、圧縮・美化をサポート。ワンクリックでJSONデータを美化し、フォーマットエラーを素早く特定し、開発効率を向上させます。

Excel to JSON 変換ツール

オンラインExcel to JSONコンバーター。.xlsxおよび.xls形式に対応、複数シート選択対応。スプレッドシートデータをローカルでJSON形式に変換。

正規表現テストツール

オンライン正規表現テストツール。リアルタイムマッチング、結果をハイライト表示。よく使う正規表現ライブラリ対応、正規表現のデバッグと検証に役立ちます。