加载数据查询无法使用insert/replace选项

0qx6xfy6  于 2021-06-19  发布在  Mysql
关注(0)|答案(2)|浏览(516)

我正在尝试将csv文件中的数据上载到mysql数据库表中,但在load data query中使用insert/replace选项时出现错误“java.sql.sqlexception:无效的utf8字符串:“””。但如果没有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选项来消除重复条目。

9avjhtql

9avjhtql1#

你说得对,问题不在语法上。问题可能是mysql表和csv文件之间的字符集不同。我遇到了一个类似的问题,通过在查询中提到characterset解决了这个问题。尝试下面给出的查询,它应该可以工作,并确保您的csv文件有mysql表支持的数据。
查询:

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的答案来回答这个问题-:尝试用replace和auto\u increment进行加载数据填充,这对我来说是个奇迹。

yvt65v4c

yvt65v4c2#

将数据本地infile“/home/xx/conf.csv”加载到以“,”结尾的表配置字段中,行以“\n”结尾,忽略1行;
试试这个。

相关问题