CSVデータをMySQLにインポートする

CSVのデータをMySQLにインポートしたので方法のメモ。

環境

  • Vagrant : Scotchbox
    • Ubuntu 14.04 LTS
    • PHP 5.6

準備

MySQLにテーブルを作成する。 テーブルに作成した項目順にカンマ区切りで値を作成する。

エクセルでCSVファイルを作成した場合は、MySQLの文字コードをUTF-8としたので、テキストエディタなどでUTF-8に変更しておく 改行コードは、CRLF

作成したCSVファイルは、vagrantの共有フォルダに保存しておく。

インポート

$ vagrant sshから、$ mysql -u rootでmysqlにログインし、以下のコマンドでインポートする。 インポートするファイルは、data.csvとする。

インポートするファイルはパスで指定するが、scotchboxの場合、共有フォルダの階層はvagrant内から見た場合は、/var/www/となるので、それを指定してやる。

1
mysql> LOAD DATA LOCAL INFILE '/var/www/data.csv' INTO TABLE SUB_ListAll FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n';

注意点

改行コード

インポートする際に使用する、DATA INFILEコマンドでは、デフォルトの改行コードはLFになっているよう。 なので、明示的に改行コードを指定してやる必要がある。 それが以下の部分。

1
LINES TERMINATED BY '\r\n'

LOCAL INFILE

local infileを利用するには、設定で許可されている必要があるよう。 これが許可されていないと、以下のエラーが返ってくる。

The used command is not allowed with this MySQL version

デフォルトでは許可されていなかったので、mysqlへログインする際に許可してログインする。

1
$ mysql --local-infile=1 -u root

まとめ

ちょっとググっても色々と落とし穴があるようで、環境によってはその他の穴も空いてるかもしれない。 とりあえず、冒頭にあげた環境では上記でいけた。

ちなみに、ファイルはパーミッションを777に指定してやらなくてもそのままでいけた。

参考

   このエントリーをはてなブックマークに追加