CSVからSQLコンバーター
CSVを貼り付けるかファイルをドロップすると、データベースで実行できる.sqlスクリプトが返ってきます。中身は2つのパートに分かれています。csv_exportという名前のテーブルを作るCREATE TABLE文と、ファイルの各行に対応するINSERT文です。
ファイルはブラウザ内で読み込み・解析されるので、お使いのマシンから外に出ることはありません。スクリプトを組み立てるために送られるのは、解析済みの行データだけです。カラム名はヘッダー行から取られ、小文字に変換され、スペースや記号はアンダースコアに置き換わります。すべてのカラムはTEXTとして作られ、各値はクォートで囲まれるため、数値や日付は文字列として扱われます。
に変換中...
使い方
- 読み込み: CSVアップロード、貼り付け、またはURL
- プレビュー: データの確認と編集
- 変換: "SQL に変換"をクリック
- ダウンロード: 変換ファイルをダウンロード
機能
- 最大100万行
- リアルタイム進捗
- 効率的な処理
- サーバー保存なし
- SQL変換
SQL について
SQL INSERT文。
最適: DBインポート
CSVから実行できるSQLスクリプトを手に入れる
CSVを手作業でデータベースに取り込むのは骨が折れます。数千行を前にINSERT文を1つずつ打ち込むか、インポートウィザードのクォートや区切り文字の癖と格闘するか。このツールならそこを飛ばせます。CSVを渡すだけで、シンプルな.sqlファイルが返ってきます。先頭にCREATE TABLE、その下に各行のINSERTが並ぶ形です。
狙いは、地味だけれどすぐ片付けたい作業です。ローカルの開発用データベースにデータを入れる、表計算のエクスポートをテーブルに流し込む、クエリを書き始めるためのサンプルデータをスキーマに用意する、といった用途ですね。出力はテキストなので、1行も実行しないうちに開いて、読んで、書き換えられます。
スクリプトの中身
出力の形は決まっていて、先に知っておくと迷いません。冒頭にはコメント行が2行あり、CSVエクスポートであることと生成した日時が記されています。続いてCREATE TABLEです。テーブル名は常にcsv_exportで、主キーとして自動採番のidカラムが付き、CSVの各ヘッダーがそれぞれカラムになります。その下には、INSERT INTO csv_export (...) VALUES (...); の行が、元の順番のまま各データ行に対して並びます。
カラム名はヘッダー行から取り、小文字にしたうえで、英数字とアンダースコア以外の文字はすべてアンダースコアに置き換えます。たとえばFirst Nameはfirst_nameに、Order #はorder__になります。もし2つのヘッダーが同じ名前に縮まると、CREATE TABLEにカラムが重複してしまうので、変換前にヘッダー行をざっと確認しておくとよいでしょう。
データの扱われ方
ファイルはブラウザ内で読み込まれ、解析されます。区切り文字はヘッダー行から自動で判別するので、カンマ、セミコロン、タブ、パイプのどれで区切られたファイルでも、設定なしで読み込めます。クォートで囲まれたフィールドや、その中で二重になったクォートは、標準的なCSVの流儀で解釈されます。
SQL側では、各値がシングルクォートで囲まれ、値の中のシングルクォートは二重になります。そのためO'Brienという名前は'O''Brien'となり、文が壊れません。同じ理由で、すべてのカラムがTEXTなので、数値も日付も'30'や'2026-07-20'のように文字列としてクォートされて出力されます。空のセルはNULLではなく空文字列になります。ひとつ注意点があります。シングルクォートはエスケープされますが、バックスラッシュはされません。データにバックスラッシュが含まれていて、MySQLをデフォルト設定で使っているなら、実行前にその値を確認してください。UTF-8はそのまま保たれ、テーブルはutf8mb4で宣言されるので、アクセント付き文字も非ラテン文字も無事に届きます。
このツールの限界
これはあえて素朴に作ったジェネレーターで、いくつかの仕様は固定されています。先に正直に伝えておけば、あとで驚かずにすみます。
- テーブル名は必ずcsv_exportです。別の名前が必要なら、スクリプト内で書き換えるか、インポート後にALTER TABLEを実行してください。
- 型の自動判定はありません。明らかに整数や日付のカラムでも、すべてTEXTで出力されます。型付きのカラムが欲しい場合は、実行前にCREATE TABLEを編集してください。
- 構文はMySQLとMariaDB向けです。バッククォートで囲んだ名前、int(11)、ENGINE=InnoDB、utf8mb4を使います。この2つはそのまま実行できますが、Postgres、SQL Server、SQLite、Oracleでは先に手直しが要ります。
- 各行は個別のINSERT文として書き出され、複数行をまとめたINSERTにはならず、すべて1つのファイルにまとまります。数千行なら問題ありませんが、非常に大きなエクスポートではスクリプトが長くなります。
正直なところ、出来上がりは完成した移行スクリプトではなく、しっかりした下書きだと思ってください。使い捨ての開発用テーブルなら、そのまま実行できます。本番に持っていくものなら、まず開いて、実際のカラム型と実際のテーブル名を設定しましょう。その5分が、あとでTEXTカラムだらけのテーブルを作り直す手間を防いでくれます。
具体例
たとえば、古いCRMからcustomers.csvとして4,000件の顧客データを書き出したとします。カラムはFull Name、Email、Signup Date、Planといった具合です。これをドロップしてSQLを選ぶと、customers-thefreeconverter.com.sqlというファイルが返ってきます。中身は、full_name、email、signup_date、planをTEXTカラムとし、idキーを備えたCREATE TABLE csv_exportと、それに続く4,000行のINSERTです。テーブル名をcustomersに変え、signup_dateをDATEにして、ローカルのMySQLで実行すれば完了です。説明するより手を動かすほうが早いくらいです。
スクリプトの実行
.sqlファイルができたら、いつものやり方でデータベースに渡してください。mysqlクライアントにパイプで流し込んでも、GUIツールに貼り付けても構いません。idカラムは行が挿入されるたびに自動で埋まるので、触らなくて大丈夫です。ひとつ落とし穴があります。CREATE TABLEにはIF NOT EXISTSが付いていないため、同じスクリプトを2回実行すると「table already exists」エラーになります。先にテーブルを削除するか、2回目はINSERTだけ残してCREATE TABLEのブロックを消してください。
変換前にデータを整える
CSVは編集できるグリッドで開くので、SQLが生成される前に整えておけます。特定のカラムで並べ替える、本当に必要な行だけに絞り込む、カラム名がきれいになるようヘッダーを付け直す、重複した行を消す、といった作業です。ここで直しておけば、余計なものを取り込んであとで消す手間なく、INSERTがテーブルに入れたい内容とそろいます。
別のツールが向いている場合
プライバシーについて。CSVそのものはブラウザ内で解析されるため、アップロードされることはありません。ただしSQLを組み立てる際には、解析済みの行データがサーバーに送られ、そこで.sqlファイルが生成され、ダウンロードできるだけの短い時間だけ保持されます。生成されたファイルはおよそ10分で自動的に削除され、その後は何も保存も共有もされません。