当前位置: 首页 > 知识库问答 >
问题:

将csv文件导入MySQL数据库时,utf8字符串无效

师承弼
2023-03-14

我使用以下命令将数据从. 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并继续抛出此错误:

JAVAsql。SQLException:无效的utf8字符串:“viva Y31L。拉斯塔莫德

我对此进行了搜索,但无法真正理解错误到底是什么,除了字符串“viva Y31L.RastaMod¦ãu Version”的输入格式错误,并且不适合MySQL数据库中使用的utf8格式之外?

但是,我已经在MySQL数据库中做了以下操作,即设置名称UTF8MB4,因为在其他问题中有人建议UTF8MB4在接受奇怪字符时更灵活。

我通过在命令提示符下手动将这些奇怪的数据插入MySQL数据库表,对此进行了进一步的探索,效果很好。事实上,该表几乎显示了完整的条目:viva Y31L。拉斯塔莫德?ã、ãu版本。但是如果我从IDE运行我的程序,文件就会被拒绝。

如有任何解释,我将不胜感激。

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

我注意到我无法将同一个文件的副本导入MySQL数据库。引发的错误包括数据重复。这是因为MySQL拒绝重复的列数据吗?但是,当我更改了一列的所有数据,使复制文件中的其余数据保持不变时,它就被正确导入了。为什么会这样?

共有1个答案

刘昌翰
2023-03-14

我不认为这个直接的错误与数据的目的地不能处理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')

也就是说,您还应该确保目标表使用一个字符集,该字符集支持您试图加载到其中的数据。

 类似资料:
  • 我想进口一台电脑。通过以下方式将csv文件导入MySQL数据库: 但我发现以下错误,我无法解释原因: 有什么建议吗?

  • 问题内容: 我有几个要导入到表中的CSV文件。它们都包含不同数量的列,因此每次导入期间都会缺少一些数据。我需要一个可以让我将哪个CSV列映射到哪个MySQL列的工具。看起来MySQL工作台无法做到这一点。我还能使用什么? 问题答案: MySQL具有LOAD DATA INFILE语法: 请参阅有关自定义数据处理的文档。

  • 本文向大家介绍php将csv文件导入到mysql数据库的方法,包括了php将csv文件导入到mysql数据库的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php将csv文件导入到mysql数据库的方法。分享给大家供大家参考。具体分析如下: 本程序实现数据导入原理是先把csv文件上传到服务器,然后再通过php的fopen与fgetcsv文件把数据保存到数组,然后再用while把数据一

  • 问题内容: 我有这样的.csv文件数据 我正在使用以下代码将数据插入数据库 但是什么也没插入;错误在哪里? 问题答案: 如果执行该操作,您会发现查询语法不正确,原因如下: 文件名应该用引号而不是反引号引起来,因为它是字符串文字而不是标识符。 绝对不需要调用在and 和子句中指定分隔符。 您过度使用了反引号。实际上,在您的情况下,由于没有使用保留字,因此请放弃所有保留字。它们只会增加混乱。 在CSV

  • 问题内容: 我想通过可手动运行以更新数据的PHP脚本将表格从CSV文件导入SQLite DB。 以下是我要实现的目标的列表: 将旧表(称为“ produkte”)重命名为product-currentdate(或删除表) 然后从CSV文件导入文件(分隔并使用ISO 8859-1字符集/ CSV文件的第一行包含表标题) 将日期保存在表“产品”中 我发现了一个由于某种原因无法运行的脚本: 我希望有人知

  • 问题内容: 谁能解释一下如何将Microsoft Excel文件导入到MySQL数据库中? 例如,我的Excel表如下所示: 问题答案: 将其导出为某种文本格式。最简单的可能是制表符分隔的版本,但是CSV也可以使用。 使用加载数据功能。见http://dev.mysql.com/doc/refman/5.1/en/load-data.html 查看页面的一半,因为它将为制表符分隔的数据提供一个很好