加载数据查询不适用于 INSERT/REPLACE 选项

load data query is not working with INSERT/REPLACE option

我正在尝试将数据从 CSV 文件上传到 mysql 数据库 table,但是在加载数据查询中使用 INSERT/REPLACE 选项时出现错误 "java.sql.SQLException: Invalid utf8 character string: '' "。但是相同的查询在没有 INSERT/REPLACE 选项的情况下工作正常。

查询:

Statement  stmt = conn.createStatement(
ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);

String  query = "LOAD DATA  INFILE 'D:\"+flnm+"'  REPLACE INTO TABLE prfl_hntr " 
+ "FIELDS TERMINATED by ',' LINES TERMINATED BY '\n' IGNORE 1 LINES"
+ " (candidate, phone, mailid, skill, texp, rexp, pctc,np);";
stmt.executeUpdate(query);

我已经验证了 mysql 文档中的语法 - https://dev.mysql.com/doc/refman/8.0/en/load-data.html

请注意,我需要在查询中使用 REPLACE/IGNORE 选项来消除重复条目。

加载数据本地 INFILE '/home/xxxxx/conf.csv' 进入 TABLE 配置字段由 ',' 终止的行由 '\n' 忽略 1行;

试试这个。

你是对的,问题不在于语法。问题可能在于 Mysql table 和您的 CSV 文件之间的字符集不同。我有一个类似的问题,并通过在查询中提及字符集来解决它。尝试下面给出的查询应该有效,并确保您的 CSV 文件包含 Mysql table.

支持的数据

查询:

String  query = "LOAD DATA  INFILE 'D:\"+flnm+"'  REPLACE INTO TABLE prfl_hntr " 
+"character set latin1 "
+ "FIELDS TERMINATED by ',' LINES TERMINATED BY '\n' IGNORE 1 LINES"
+ " (candidate, phone, mailid, skill, texp, rexp, pctc,np);";
stmt.executeUpdate(query);

此外,您可以按照@RolandoMySQLDBA 对这个问题的回答:Trying to do LOAD DATA INFILE with REPLACE and AUTO_INCREMENT 它为我创造了奇迹。