2017-09-19 72 views
0

我用下面的命令來導入數據從.csv文件到MySQL數據庫中的表像這樣:無效的UTF8字符串導入CSV文件導入到MySQL數據庫的時候

 String loadQuery = "LOAD DATA LOCAL INFILE '" + file + "' INTO TABLE source_data_android_cell FIELDS TERMINATED BY ','" + "ENCLOSED BY '\"'" 
+ " LINES TERMINATED BY '\n' " + "IGNORE 1 LINES(.....)" +"SET test_date = STR_TO_DATE(@var1, '%d/%m/%Y %k:%i')"; 

然而,由於其中一列的的資源文件包含一個非常扭曲的數據是:viva Y31L.RastaMod‰ã¢_Version程序拒絕將數據導入到MySQL和不斷拋出此錯誤:

java.sql.SQLException: Invalid utf8 character string: 'viva Y31L.RastaMod'

我搜索了關於這一點,但不能真正地瞭解究竟是什麼錯誤是,比其他這是INPUT格式字符串「viva Y31L.RastaMod‰¹版本」錯了,並不適合MySQL數據庫中使用的utf8格式?

但是,我已經在我的MySQL數據庫中做了以下的SET NAMES UTF8MB4,因爲在其他問題中建議UTF8MB4在接受怪異字符方面更靈活。

我通過手動將奇怪的數據插入到命令提示符中的MySQL數據庫表中進行了深入研究,該命令提示符工作正常。實際上,表格幾乎顯示了完整的條目:viva Y31L.RastaMod?ã¢_Version。但是,如果我從IDE運行我的程序,文件將被拒絕。

希望有任何解釋。有關CSV文件的導入過程到MySQL

第二次要問題:

我發現我不能導入同一個文件的副本到MySQL數據庫。拋出的錯誤包括數據是重複的。那是因爲MySQL拒絕重複的列數據?但是,當我更改了一列中的所有數據而其餘部分與該複製文件中的數據相同時,則會正確導入。爲什麼?

回答

0

我不認爲這個直接的錯誤與數據的目的地無法應對UTF-8字符有關,而是您使用LOAD DATA的方式。您可以嘗試指定加載數據時應使用的字符集。考慮以下LOAD DATA命令,這是你所得到的最初但略作修改:

LOAD DATA LOCAL INFILE path/to/file INTO TABLE source_data_android_cell 
CHARACTER SET utf8 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\n' 
IGNORE 1 LINES(.....) 
SET test_date = STR_TO_DATE(@var1, '%d/%m/%Y %k:%i') 

這是說,你還應該確保目標表使用支持您要加載到數據的字符集它。

+0

我按照建議修改了上面的java窗體,但仍然得到相同的錯誤=/String loadQuery =「LOAD DATA LOCAL INFILE'」+ file +「'INTO TABLE source_data_android_cell CHARACTER SET utf8 FIELDS TERMINATED BY','」+ \「'」「 +」LINES TERMINATED BY'\ n'「+」IGNORE 1 LINES(.....)「+」SET test_date = STR_TO_DATE(@ var1,'%d /%m /%Y %k:%i')「; – Mack

+0

'source_data_android_cell'表的編碼是什麼? –

+0

UPDATE:我發現使用CHARACTER SET latin1似乎做了詭計,也許我提到的數據中的奇怪符號之一似乎沒有 – Mack