MySQLにCSVのデータを取り込む方法

 MySQLは、仕事のイントラネットで大活躍している。Freeであるのが最大の魅力であり基幹のデータベースサーバーとして利用しない環境なら何の問題もなく使える。

 MySQLをバージョンアップしたりする時には、Export、Importを使えば良いし、同じバージョンでデータを移行する際は、そのままmysqlのdataフォルダをコピーしてやればそのまま移行できる。

 今回の嵌った事は、csvのデータを取り込む方法である。実は、今までcsvのデータを取り込むことはしたことは無かった。最初気軽にimportすれば良いだろうと考えていた。

※自分の使用している環境はXAMPPでバージョンは、1.6.5と少し古いバージョンを使用している。MySQLのバージョンは5.0.51になる。

 最初にphpMyAdminからMySQLを開き、importを見ると、対応するファイルはSQLしかない。SQLファイルは、CSVとは異なるのは当然で、もしCSVSQLに変更するなら形式を変更する必要がある。データが数十程度なら手作業で済むのだが、データ数が2000程度あるため、その作業を手作業でするのは大変である。

 一つ問題なのが、データ中に「,」が含まれることである。それはエディターで「,」を「、」に置換することで済ますことができた。

 そして次の問題は、データをダブルクォーテーションで括ることである。CSVデータを開くと余計なところにバグなようなものが入り込みデータ並びがおかしくなっていることがある。案の定Excelで開くと、データに余計な空白が入り込んでいるのを確認した。そのデータをきちんと並ぶように余計な空白を削除し並びを整え、CSVで保存しなおす。

 ここで気を付けならないことは、CSVの文字形式をSJISでは無く、UTF-8にしなければならないことである。MySQLのインストール時に文字形式を何にしているかによるが、基本的にはUTF-8にしている人が多いのではないだろうか。CSVで取り込む際は、文字形式をUTF-8に変換しておく必要がある。今のWindows7以上に入っているメモ帳でもUTF-8形式で保存できるようになっているのでそれを利用することも可能である。

 そして、SQL形式に簡単にする方法をネットで検索したが余り良い方法が無い。Excelのマクロでゴリゴリやるかと思ったが、思い直して検索すると以下のページがビタリだった。

 「バシャログ(株式会社シーブレイン)」

 CSVSQL形式に替えることばかり考えていて、SQLでimportすることなど思いもよらなかった。考えれば当たり前なのだろうが。

 そのページにあるSQL文を実行すれば、簡単に取り込める。ただ自分が少し手間取ったところがある。

 データはMySQLを動かしている端末上に無ければならないこと。自分は、ブラウザー上でphpMyAdminを動かしていたため、最初データが指定したディレクトリに無いとエラーメッセージが吐き出されしまった。なので、ネット上で共有フォルダとかネットディスクを利用しているなら、サーバー側から見たデータへのpathを記述する必要がある。

 それが面倒なら、直接サーバーを触るか、リモートデスクトップで操作すれば良い。

 もう一つ、リンク先のpathの記述であるが、

 "/tmp/users.csv" では上手く場所を認識してくれなかった。

 そこで"c://temp//users.csv" と書きかえると上手く認識され、簡単にコンバートできた。

※サーバーのCドライブ直下にtmpフォルダを作った場合。

 ネットを彷徨う人にこれが役立てば幸いである。