MySQL(RDS)へのデータのインポート
RDSへ、Excelでもらったマスタデータを取り込む時にいろいろとハマったので書いておこうと思います。
RDSでmysqlimportは使えない、LOAD DATA LOCAL INFILEを使う
まさにこちらの記事と同じ手順を辿りました。
RDSでcsvファイルをインポートしようとして権限エラーになったときの対応 - Qiita
インポートしたデータが文字化けする
mysql> show variables like '%char%'; +--------------------------+-------------------------------------------+ | Variable_name | Value | +--------------------------+-------------------------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /rdsdbbin/mysql-5.6.34.R1/share/charsets/ | +--------------------------+-------------------------------------------+ 8 rows in set (0.00 sec)
LOAD DATA INFILE
はcharacter_set_databaseを使っているようです。
上記の場合、latin1になっていることが原因でした。utf8に変える必要がありました。
set character_set_database
で、変更ができます。
mysql> set character_set_database = utf8; Query OK, 0 rows affected (0.00 sec) mysql> show variables like '%char%'; +--------------------------+-------------------------------------------+ | Variable_name | Value | +--------------------------+-------------------------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /rdsdbbin/mysql-5.6.34.R1/share/charsets/ | +--------------------------+-------------------------------------------+ 8 rows in set (0.00 sec)
参考にさせていただきました
MySQLのload data infile文で文字化けする場合の対策 | クレストボウズ::技術者ブログ
CSVデータのインポート
LOAD DATA LOCAL INFILE '/tmp/data.csv' INTO TABLE CP FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\r\n';