【发布时间】:2018-02-27 18:47:24
【问题描述】:
我使用以下命令将数据从 .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:无效的 utf8 字符串:'viva Y31L.RastaMod'
我对此进行了搜索,但无法真正理解错误到底是什么,除了这个字符串“viva Y31L.RastaMod‰ã¢_Version”的输入格式是错误的并且没有适合 MySQL 数据库中使用的 utf8 格式吗?
但是,我已经在我的 MySQL 数据库中执行了以下操作,即 SET NAMES UTF8MB4,因为在其他问题中建议 UTF8MB4 在接受奇怪字符方面更灵活。
我通过在命令提示符中手动将奇怪的数据插入 MySQL 数据库表中进一步探索了这一点,效果很好。事实上,表格几乎显示了完整的条目:viva Y31L.RastaMod?ã¢_Version。但是如果我从 IDE 运行我的程序,文件就会被拒绝。
希望有任何解释。
关于csv文件导入mySQL过程的第二个小问题:
我注意到我无法将同一文件的副本导入 MySQL 数据库。引发的错误包括数据重复。那是因为 MySQL 拒绝重复的列数据吗?但是,当我更改一列的所有数据时,在复制的文件中其余部分保持不变,它会正确导入。为什么呢?
【问题讨论】: