CSVファイルをmysqlにインポートした時のエラー対応 ーー Incorrect integer value: '1' for column 'num' at row 1
mysqlにCSVファイルをインポートしようとした時にエラーがでまくったところから解決までのメモメモ。。
CSVを普通に入れてみた
mysql> load data local infile '/home/user/Category.csv' into table categories fields terminated by ',' (num, name);
エラーでまくったのでエラー文言みてみると・・
mysql> show warnings; Incorrect integer value: '1' for column 'num' at row 1
半角数字の1が入っているはずなのにintegerじゃないと怒られる。
(数字やろなんやねんふざけんなとか言いながらすすめる・・・)
なんか一応データは入ってるみたい。
mysql> select * from categories; +----+------+---------------------+ | id | num | name | +----+------+---------------------+ || ラーメン |肉 |3 | ハンバーグ |食 |華 |ば |司 |喫茶店 |カレー |親子丼 | 11 | うどん・そば |うどん |3 | イタリアン || ラーメン |肉 |3 | ハンバーグ |食 |華 |ば |司 |喫茶店 |カレー |親子丼 | 11 | うどん・そば |うどん |3 | イタリアン +----+------+---------------------+ 26 rows in set (0.00 sec)
でもぐちゃぐちゃ。。
mysql> select * from categories\G;
でやると綺麗にデータが見えるという謎。。
文字コードの問題かと思ったので調べてみた。
➜ ~ nkf --guess RestaurantCategory.csv UTF-8 (CR)
大丈夫そう。
改行コードとか?
➜ ~ file Category.csv Category.csv: UTF-8 Unicode (with BOM) text, with CRLF line terminators
お?CRLFってWindowsの改行コードだよな。ってことでUnixの改行コードに変更する。
➜ ~ tr -d \\r
<Category.csv> LF_Category.csv
でもまだできず・・・。で、もう無理かと思ったところ
BOMありが原因になることあるよねーという記事を何処かで見つけて
あれ?確かwith BOMって、、
ってことでみてみると
➜ ~ file LF_Category.csv LF_Category.csv: UTF-8 Unicode (with BOM) text
やっぱり。
ってことでuconvコマンドで変更できるみたいなので
コマンドがあるか確認。
➜ ~ uconv zsh: correct 'uconv' to 'ujconv' [nyae]? n zsh: command not found: uconv
ない。
入れてみる。
➜ ~ sudo yum install uconv -y
そんなのない
なんかicuで全部入ってくるみたいなので入れてみる
➜ ~ sudo yum install icu -y
➜ ~ uconv -f utf-8 -t utf-8 --remove-signature LF_Category.csv > no_bom_Category.csv
➜ ~ file no_bom_RestaurantCategory.csv no_bom_RestaurantCategory.csv: UTF-8 Unicode text
うまくいった。
で、あとは
mysql> load data local infile '/home/user/Category.csv' into table categories fields terminated by ',' (num, name); mysql> select * from categories; +----+------+--------------------+ | id | num | name | +----+------+--------------------+ | 1 | 1 | ラーメン | | 2 | 2 | 焼肉 | | 3 | 3 | ハンバーグ | | 4 | 4 | 定食 | | 5 | 5 | 中華 | | 6 | 6 | そば | | 7 | 7 | 寿司 | | 8 | 8 | 喫茶店 | | 9 | 9 | カレー | | 10 | 10 | 親子丼 | | 11 | 11 | うどん・そば | | 12 | 12 | うどん | | 13 | 13 | イタリアン | +----+------+--------------------+ 13 rows in set (0.00 sec)
きれいにできました。
この辺の知識なくてかなり手こずりましたが無事完了(・∀・)