1. 程式人生 > >mysql匯入csv檔案出錯解決辦法

mysql匯入csv檔案出錯解決辦法

將*.csv檔案匯入mysql可使用LOAD DATA INFILE,
概要寫法:
Load data in file
 對於本地檔案,使用 load data local infile 'D:\\filename.csv' 語法
具體語法使用可參照:http://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html#load-data
如果一個表中只有英文字元則匯入不出現問題,寫法也極其簡單:
LOAD DATA LOCAL INFILE ‘D:\\ports.csv’ INTO TABLE ports;
 
遇到的問題一:ports.csv檔案中存在中文字元,匯入資料後變成亂碼
首先修改表及欄位的編碼方式
alter table ports character set gbk2312;
alter table ports modify port_chinese varchar(50) character set gbk2312;
 
 
通過 show create table ports 查看錶及欄位的編碼方式,當然也可以通過視覺化工具修改欄位的編碼格式
我匯入的命令列具體寫法是:
 
LOAD DATA LOCAL INFILE ’D:\\ports.csv’ INTO TABLE ports  FIELDS TERMINATED ‘,' ENCLOSED BY ‘”’ LINES TERMINATED BY ‘\r\n’ starting by’’;

 
但我修改以上兩項之後我匯入資料依舊亂碼,我的CSV檔案編碼格式是GBK,


在網路上找到一篇關於此問題的文章:http://www.sqlstudy.com/sql_article.php?id=2008081901,借鑑於文章中的寫法修改語句如下:
LOAD DATA LOCAL INFILE ’D:\\ports.csv’ INTO TABLE ports  character set gbk2312  FIELDS TERMINATED ‘,' ENCLOSED BY ‘”’ LINES TERMINATED BY ‘\r\n’ starting by ’’;
 
至此亂碼變成了正確的中文字元。
 
遇到的問題二:在匯入資料後檢視資料時發現CSV檔案中第一行有效資料丟失,而多出三行怪異的無效資料行,而且在執行匯入命令時有39個警告


首先我使用SHOW WARNINGS;命令檢視提示的警告內容,發現CSV檔案中的列標題匯入資料庫中出現了N多警告,而出現數據錯誤的關鍵原因在 LINES TERMINATED BY ‘\r\n’ 這句中,因為第一行列標題並沒有以回車換行字元結束,第一行標題列在轉換過程出錯,也導致了第一行有效資料在匯入過程中出現錯誤。我將csv檔案中檔案標題的最後一列標題加上一回車後儲存資料,CSV中的第一行有效資料終於匯入到資料中,但卻多一行標題行資料,通過IGNORE命令可解決。
最後的CSV匯入命令列的寫法:
LOAD DATA LOCAL INFILE ’D:\\ports.csv’ INTO TABLE ports   character set gbk2312  FIELDS TERMINATED ‘,' ENCLOSED BY ‘”’ LINES TERMINATED BY ‘\r\n’ starting by ’’ IGNORE 1 LINES;