mysqlをcsv出力する方法として、into outfileを使うほかにlinuxコマンドのsedを使ってtxtデータを加工する方法があるのですが、再度mysqlにインポートできるように加工する方法が知りたいです。
例えば、以下のようなテーブルがあったときに、
SQL
1[mysql] desc users; 2 3+--------------------+------------------------+------+-----+---------------------+----------------+ 4| Field | Type | Null | Key | Default | Extra | 5+--------------------+------------------------+------+-----+---------------------+----------------+ 6| id | bigint unsigned | NO | PRI | NULL | auto_increment | 7| name | varchar(24) | YES | NULL | | 8| updateTime | datetime | NO | | current_timestamp() | | 9+--------------------+------------------------+------+-----+---------------------+----------------+
bash
1$ mysql -uroot -p <Database> -e "select * from users;" | sed -e 's/\t/,/g' > <ファイルパス>/hoge.csv
とすれば、hoge.csvにはすべての値がカンマ区切りで出力されますが、このままではimport時にnameやupdateTimeフィールドがstringやdatetime型として認識されずエラーとなってしまいます。
//hoge.csv id, name, updateTime 1, 田中 太郎, 2020-10-31 20:03:12 2, 鈴木 次郎, 2020-11-01 00:05:45 3, 山田 花子, 2020-10-02 01:01:30 ... .. .
SQL
1[mysql] INSERT IGNORE INTO users SELECT * FROM CSVREAD('<ファイルパス>/hoge.csv', null);
この場合、nameやupdateTimeは""で囲んでcsv上では文字列として格納しなければならないのでしょうか?またその場合特定のカラムは""で囲むようなsedの指定の仕方をしなければならないと思うのですが、どう書けばよいのでしょうか?
あなたの回答
tips
プレビュー