程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> Csv文件導入Mysql出現的亂碼問題及解決方法

Csv文件導入Mysql出現的亂碼問題及解決方法

編輯:MySQL綜合教程

將*.csv文件導入mysql可使用LOAD DATA INFILE,

概要寫法:

LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE ‘file_name.csv’

[REPLACE | IGNORE]

INTO TABLE tbl_name

[FIELDS

[TERMINATED BY ‘string’]

[[OPTIONALLY] ENCLOSED BY ‘char’]

[ESCAPED BY ‘char’]

]

[LINES

[STARTING BY ‘string’]

[TERMINATED BY ‘string’]

]

[IGNORE number LINES]

[(col_name_or_user_var,….)]

[SET col_name=expr,…)]

具體語法使用可參照: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 查看表及字段的編碼方式,當然也可以通過可視化工具修改字段的編碼格式

但我修改以上兩項之後我導入數據依舊亂碼,我的CSV文件編碼格式是GBK,

我導入的命令行具體寫法是:

LOAD DATA LOCAL INFILE ’D:\\ports.csv’ INTO TABLE ports FIELDS TERMINATED ‘,' ENCLOSED BY ‘”’ LINES TERMINATED BY ‘\r\n’ starting by’’;

在網絡上找到一篇關於此問題的文章: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;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved