あじちゃんのブログ。備忘録。

〜SEもOLなんですかね?

CSVファイルをtableへまるごと取り込む

load data infile を使う

-- ※localなのでlocalオプションを追加しています
LOAD DATA LOCAL INFILE 'HOKKAI.CSV'
INTO TABLE zipcode
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\r\n';

エラーが発生

  • エラー内容
ERROR 1148 (42000): The used command is not allowed with this MySQL version

調べたところ、「セキュリティ的な問題で、権限がないとできないよ。」ということらしい。
なので、一度 quit して以下でDBに入る。

$ sudo mysql --local_infile=1 -u username -p password

これで、権限については解消される。

  • 次に、こんなエラーが・・・
ERROR 1300 (HY000): Invalid utf8 character string: '"'

「読み込もうとしたファイルがutf8じゃないよ。」と言われている。
→DBをsjisに変えます・・・

set character_set_database=sjis;

これでOK。

再度、以下を実行して完了。

LOAD DATA LOCAL INFILE 'HOKKAI.CSV'
INTO TABLE zipcode
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\r\n';

Query OK, 8253 rows affected (0.09 sec)
Records: 8253  Deleted: 0  Skipped: 0  Warnings: 0

結論

LOAD DATA [LOCAL] INFILE '取り込みたいCSVファイルのパス'
INTO TABLE tablename
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\r\n';