MySQLを使い始めると、すぐにCSVからデータをインポートしたいという要望がでてくるはずです。
実際のエラーの解消法とあわせて、インポートの方法をお伝えしていきます。
そもそも、MySQLにCSVのデータをインポートできる?
もちろん簡単にできるから、安心して!
CSVのインポート方法(エラーが出た!)
まずは、MySQLをスタートさせてから、使うデータベースを選びます。
use (データベース名)
今回はデスクトップにある、1.csvというデータをインポートさせようと思います。
LOAD DATA LOCAL INFILE '/Users/xxxxxxxxxxx/Desktop/1.csv' INTO TABLE (テーブル名) FIELDS TERMINATED BY ',';
FIELDS TERMINATED BY で、テキストの区切りを指定しています。
CSVの場合は、’,’(カンマ)で問題ありません。
いざ、実行。ところが以下のエラーが表示されました。
Loading local data is disabled; this must be enabled on both the client and server sides
ローカルデータなので使えません、というエラーがでてきました。
CSVのインポート方法(エラー解消!)
解決方法は以下です。
mysqlに入る前に、–local_infile=1をつけておきます。
mysql -u root -p --local_infile=1
通常通り、パスワードを入力します。
Enter password:
@@local_infile:0はローカルデータにアクセスできない
MySQLにログインできたら、確認のため、以下を入力してみます。
SELECT @@local_infile;
以下の結果がでました。
+----------------+
| @@local_infile |
+----------------+
| 0 |
+----------------+
1 row in set (0.00 sec)
答えが0です。
0が表示されている場合は、ローカルデータにアクセスができません。
@@local_infile:1に変更
対処法は以下のコマンドです。
set persist local_infile = 1;
これで変更完了。
先ほど同様にチェックをしてみます。
select @@local_infile;
+----------------+
| @@local_infile |
+----------------+
| 1 |
+----------------+
1 row in set (0.00 sec)
今回は1が表示されました。
これでローカルデータにアクセスが可能になっています。
改めて、以下のコマンドでインポートを実行。
LOAD DATA LOCAL INFILE '/Users/xxxxxxxxxxx/Desktop/1.csv' INTO TABLE(テーブル名) FIELDS TERMINATED BY ',';
Macの場合、CSVファイル名のコピーは、ファイルを選択して、Command+Option+C で簡単にできるよ
以下の通り無事に、クエリOKが返ってきました。
Query OK, 9 rows affected (0.01 sec)
Records: 9 Deleted: 0 Skipped: 0 Warnings: 0
CSVインポート時の注意点
多くの場合、1行目にヘッダーを設定していると思いますが、
普通にインポートした場合は、それを無視してくれません。
その場合は、2行目からインポートするように指示を出しましょう。
コマンドは以下です。
LOAD DATA LOCAL INFILE '/Users/xxxxxxxxx/Desktop/1.csv' INTO TABLE(テーブル名) FIELDS TERMINATED BY ',' ignore 1 lines;
最後に ignore 1 lines を追加しました。これで2行目からインポートしてくれます。
まとめ
今回は、以下のエラーの対処法を解説しました。
Loading local data is disabled; this must be enabled on both the client and server sides
対処法は、以下のコマンドで、loca_infileを1に設定することです。
set persist local_infile = 1;
MySQLでCSVを使うことは非常に多いので、ぜひ有効活用してください。