Home > PHP

MySQLにCSVデータで一括データ挿入

2010.10.05 13:38
mysql_csv.jpg MySQLの便利さもさることながら、その便利さがわからないとこれまた困難極まりない代物になってしまうもので、今回も実に四苦八苦してしまいました。元々あるエクセルデータなどをCSV出力加工してMySQLに一気に読み込まそうという方法です。やり方と理屈は非常に簡単なのに、どうにもこうにもうまくいかない。
 ここでは、PHPMyadminからCSVファイルを読み込ます方法を紹介します。

CSVデータを準備する

 まずは元になるCSVデータを準備します。予めデータベースと同様のカラム数(コンマ切り)でデータを格納しておく必要があります。これを完全に一致さあせていないとエラーではじかれてしまいますのでご注意。基本的にはコンマ切り、改行は\nでよいです。エクセルデータは元々文字コードがShift_JISなので、これをUTF-8に変えておく必要があるかもしれません。(自分のMySQLのデフォルト文字コードを確認してください。たぶん、それに合わせてCSVを保存しておくことになると思います。)
 もう1つ面倒なのは、日本語はダブルクォートで囲まないと読み込んでくれないということです。例えば、
オムニオ,太郎\n
という場合は、
"オムニオ","太郎"\n
じゃないとMySQLに流し込めません。(実際は、英数字を含めてすべてをダブルクォートで囲んじゃって構わないです。それできちんと読み込まれますが、最低限、日本語はダブルクォートで囲まないと読み込まれないということです。)
 まとめると以下のようになります。
データベースのカラム数とCSVのコンマ数を完全に同期しておくこと。
改行コードは\nにしておくこと。
CSVの文字コードをデータベースの文字コードと合わせておくこと。
日本語はダブルクォートで囲んでおくこと。
編集が大変面倒ですが、正規表現やエクセルの関数などいろいろ使ってがんばってください。

PHPMyAdminの操作


 1.テキストファイルの位置からCSVファイルを選択します。
2.ファイルの文字セットを選択します。CSVファイルの文字コードを選択します。(MySQLのデータベースの文字コードではありません。ここでは、CSVの文字コードをMySQLに合うように設定変更して読み込んでくれるという準備の設定になります。)
3.インポートするファイル形式は、LOAD DATAするCSVを選択します。
4.フィールドの区切り記号は、コンマ","を入力します。(CSVは基本的にはコンマです。)
5.改行終端記号には、\nを設定してください。CSVファイルの設定では、LFが\nに相当します。CRやCR+LFを選ばないようにしてください。
6.最後に「実行するボタン」を押します。成功時には以下のような画面が出るのでそれで終了です。データベーステーブルを確認してみてください。
insert_result.jpg

このやり方は何度やっても忘れてしまうので、備忘録として。






プロフィール



  • Name :: 山上オサム ♂(39)
  • Hobby :: 武術
  • Work :: Web Designer