【问题标题】:CSV file import errors in to Mysql Workbench 6.3Mysql Workbench 6.3 中的 CSV 文件导入错误
【发布时间】:2016-09-15 02:06:14
【问题描述】:

我是 Mysql 的新手,我正在使用它来利用我拥有的几个非常大的 CSV 文件(有些超过一百万行)。我在Win7-64 Ultimate上。我已经安装了 MySql Workbench v. 6.3.6 build 511 64 bit。我读了一个类似的问题,但是我不能发表评论,因为我是新手。无论如何,我得到了一个不同的错误。

我已经建立了一个名为 crash0715 的数据库,并创建了一个名为 driver_old 的包含五列的表。第一列是一个报告编号(设置为 INT(20)),它将被键入到其他文件。它包含一些重复项,具体取决于其他列中的数据。接下来的四列包含 1 位或 2 位数字数据。

我将 report_number 列设置为 INT(20),主键,不为空。 其他 4 个设置为 INT 或 INT(2)

当我尝试通过 GUI 在 5 列 CSV 文件(在我的 c:\ 根目录中命名为 do.csv)中导入超过 100 万行时,程序挂起。我让它运行了 12 个小时以上,我的任务管理器显示该程序正在使用 25% 的 cpu。

接下来我尝试了命令行。切换到数据库后,我用 LOAD DATA LOCAL INFILE 'c:/do.csv' INTO TABLE driver_old FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';

在尝试两次导入之前,我已从 CSV 中删除了标题行。

我收到以下消息: 查询正常,111 行受影响,65535 个警告 记​​录:1070145 已删除:0 跳过:1070034 警告:2273755

我阅读了 SHOW WARNINGS 的前几行,它们如下: 1264 第 1 行的列 'report_number' 的值超出范围。 1261 第 1 行不包含所有列的数据

这两个重复所有其他行。

还有一个 1062 键 'primary' 的重复条目 '123456789'(123456789 是代表值)

其他两个代码也再次出现。

CSV 文件的第一列没有空格,但其他列有一些。

知道我在这里做错了什么吗?

【问题讨论】:

  • 这里有很多不同的问题。我建议你分而治之。我会先获取较小的数据子集(可能是 1000 行 csv?)并确保它首先有效。 Out of range...Duplicate entry... 消息表明您的 csv 数据与您要导入的表的定义不匹配...您可能会这样用更小、更方便的数据集很清楚这一点。

标签: csv import mysql-workbench


【解决方案1】:

我通过保存和导出 sql 插入语句解决了这个问题

【讨论】:

    【解决方案2】:

    我会使用 bigint insted of int

    插入忽略或替换可能有助于处理重复的主键值!

    LOAD DATA LOCAL INFILE 'c:/do.csv' ignore/replace INTO TABLE driver_old FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';

    我无法对这个问题发表评论,但如果您可以将 url 发布到显示 csv 文件中几行的图片并编码您如何创建表格和插入数据,那就太好了!这对回答问题很有帮助!

    【讨论】:

    • 我将文件重新格式化为 utf-8 并为所有空白单元格填充零。由于行数的关系,我必须使用一个名为 GS-Calc 的程序来打开、修改和保存文件。我了解到我试图将数据导入软件的错误部分。当我在此之后尝试 GUI 导入时,它给了我另一个错误,所以我重新格式化为 utf-16,它现在正在加载。进度条在移动,所以没有挂断。如果可行,我会将其发布为答案。感谢您的帮助。
    • 条形图终于横穿屏幕,我能够完成导入。显示的消息说 \path\do.csv 是在 80651.335 秒(22.4 小时)内导入的。表 crash0715.driver_old 已被使用。导入 0 条记录。表中没有数据。然后,我从我的 GS-Calc 程序中复制并粘贴了 100 行(如上所述),并将其保存为 utf-8 csv 文件。当我尝试导入它时,它不会去。我必须在 Libre Office (utf-8) 中打开文件并将其保存在那里。它导入正常。问题似乎是 GS-Calc 程序。我想我有答案,但需要测试一下。
    【解决方案3】:

    我现在已经成功导入了 1045767 条记录。正如此处另一位成员所建议的那样,我导入了一个 100 行的小文件,该文件给出了相同的错误。然后我在 Libre Office 中打开了 csv 并保存了它。我可以导入它。

    问题在于电子表格程序 GS-Calc。保存 csv 文件时,它提供了三个选项:UTF-8、UTF-16 和 ANSI/OEM/ISO。我最初将它保存为 UTF-8,但它返回了错误。

    我将它保存为 ANSI/OEM/ISO 并且可以正常导入。我希望这对将来处理大型 csv 文件的其他人有所帮助。

    【讨论】:

      【解决方案4】:

      我用逗号更改mysql中的默认分隔符

      【讨论】:

      • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
      猜你喜欢
      • 2016-02-06
      • 2016-05-07
      • 1970-01-01
      • 2018-12-23
      • 1970-01-01
      • 2015-04-07
      • 2017-09-07
      • 2020-07-26
      • 2019-03-18
      相关资源
      最近更新 更多