我使用以下命令将数据从.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”的INPUT格式是错误的,并且不适合MySQL数据库中使用的utf8格式之外?

但是,我已经在MySQL数据库中执行了SET NAMES UTF8MB4以下内容,因为在其他问题中有人建议UTF8MB4可以更灵活地接受奇怪的字符。

我通过在命令提示符下将奇怪的数据手动插入MySQL数据库表中来进一步探索了这一点,它工作正常。实际上,该表几乎显示了完整条目:viva Y31L.RastaMod?ã¢_Version。但是,如果我从IDE运行程序,则文件将被拒绝。

将不胜感激任何解释。

与将csv文件导入mySQL的过程有关的第二个小问题:

我注意到无法将相同文件的副本导入MySQL数据库。引发的错误包括数据是重复的。那是因为MySQL拒绝重复的列数据吗?但是,当我更改一列的所有数据,而其余部分在该复制文件中保持不变时,它将被正确导入。为什么呢?

最佳答案

我认为此立即错误与数据目标不能处理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')


话虽如此,您还应确保目标表使用的字符集支持您尝试加载到其中的数据。

10-04 23:13
查看更多