本文へスキップ

CSVからSQL生成

CSV to SQL

表から列の型を推測し、選んだ方言のCREATE TABLE文とINSERT文を書き出します。

表をCREATE TABLE文とINSERT文に変えます。対象はPostgreSQL、MySQL、SQLite、SQL Serverで、列の型はデータから推測します。何かを書き出す前に、作られる列の一覧を見せます。文字列として入ってきてしまった数値の列を捕まえるのはそこです。

🔒 ブラウザの中だけで動きますsqlcsvconvertdatabase

SQL にしたい CSV を置いてください

このタブの中で読みます。アップロードはしません。韓国語・日本語・中国語・欧米版の Excel が保存したファイル(CP949, Shift_JIS, GBK, Windows-1252)を判別します。

使い方

  1. 方言を選びます

    引用符の付け方、自動採番の書き方、文字列の型がそこで決まります。SQL ServerにはVARCHARではなくNVARCHARを出します。한글を保存できるか、クエスチョンマークを保存するかの差がそこにあります。

  2. 推測された型を確かめます

    SQLの上の表に、列ごとに与えられる識別子、型、NULLを許すかどうかが出ます。INTEGERのはずの列がTEXTになっていれば、紛れ込んだ値があるということです。

  3. まとめる行数を決めます

    1つのINSERTにつき100行が手ごろな既定です。1行につき1文にすればデバッグは楽になり、実行はずっと遅くなります。

よくある質問

すべての識別子に引用符が付くのはなぜですか。

order、group、descといった名前の列は予約語であり、必要なときだけ引用符を付けようとすれば、4つの方言それぞれで予約語の一覧を正しく持たなければならなくなるからです。無条件に付けるのは退屈ですが、常に動きます。

韓国語の列名は安全ですか。

引用符を付ければ4つの方言すべてで安全です。それでもサーバーが受け付けないなら、ASCIIのみの設定が識別子だけを翻字し、データには手を付けません。

データの中の引用符はどうなりますか。

二重にします。SQLの標準的なエスケープです。MySQLではバックスラッシュも二重にします。リテラルの中のバックスラッシュをエスケープとして扱うのはMySQLだけで、そうしないとC:\tempがタブ文字を含んだ形でデータベースに入るからです。

空のセルとNULLのどちらにしますか。

選べますし、この選択は効いてきます。SQLでは空文字列は値であり、NULLは値がないことで、比較でもCOUNTでも一意インデックスでも振る舞いが違います。既定はNULLです。

ここから渡せます

次の一手

このツールが出したものをそのまま受け取れる道具です。