【问题标题】:MySQL import - CSV - file refuses to be properly importedMySQL 导入 - CSV - 文件拒绝正确导入
【发布时间】:2021-05-30 18:08:06
【问题描述】:

我正在尝试将以下文件导入 MySQL 数据库:

https://drive.google.com/drive/folders/1WbRdNgqVre3wN4DpJZ-08jtGkJtCDJNQ?usp=sharing

使用 MySql Workbench 上的“数据导入向导”,由于某种原因,我得到“成功导入 218\223 行”,而文件包含接近 100K。 我尝试在第 210-230 行周围寻找特殊字符,也将它们全部删除,但仍然发生同样的情况。

该文件是 Microsoft Bing 地理位置的 CSV,用于 Microsoft 广告活动,从 Microsoft 网站下载(使用那里的广告帐户)。 我一直在谷歌搜索、阅读、StackOverflowing、玩文件和不同的导入选项......

我尝试将文件切成小块,但新创建的文件不知何故完全损坏了...... 编码似乎是 UTF-8,换行符都是“\n”。我尝试使用记事本++将它们全部更改为“\r\n”,但仍然发生。

文件在 Excel 中正常打开,看起来正常,通过 CSVlint.io...

唯一奇怪的是该文件包含一些值的引号,但不包含其余值(例如第 219 行。是的,我知道这听起来会是问题,但我删除了它,以及所有其余的带引号的行,它仍然会发生...还尝试使用 ENCLOSED BY "加载,见下文)。

我也尝试过使用 SQL 语句导入:

LOAD DATA LOCAL INFILE 'c:\\Users\\Gilad\\Downloads\\GeoLocations.csv'
INTO TABLE aw_geo_map_bmsl
FIELDS TERMINATED BY ','
(tried also with: ENCLOSED BY '"')
LINES TERMINATED BY '/n'
IGNORE 1 ROWS;

(必须将OPT_LOCAL_INFILE=1 添加到Advanced 上的连接中,才能允许MySQL Workbench 访问我计算机上的本地文件)

这给出了0 rows affected

帮助?

【问题讨论】:

  • 我看不到目标表的完整 CREATE TABLE 脚本...
  • 附言。有问题的行是232,Saint Pierre and Miquelon,Country,,Deprecated,,由于不正确的整数值而导致错误。使用输入预处理。

标签: mysql csv import


【解决方案1】:

结语:最后我只是放弃了所有这些导入向导,并按照旧的“从 Excel 制作 SQL 语句”的方式进行操作。

我将 CSV 数据导入 Excel。注意:在这种情况下,我发现我需要使用 Excel 中的数据导入向导(但该向导运行良好)才能将编码更改为 UTF,而 Excel 2010 将其选择为“windows”,这是错误的。

根据自己的喜好处理数据后,我使用了以下 Excel 代码:

=CONCATENATE("INSERT INTO aw_geo_map_bmsl (`Location Id`,Name,`Canonical Name`,`Location Type`,Status,`Adwords Location Id`)
 VALUES (",
A2,
",""",B2,"""",
",""",C2,"""",
",""",D2,"""",
",""",E2,"""",
",",F2,");")

为每一行生成 INSERT 语句,然后复制粘贴并仅粘贴值,然后粘贴到编辑器中,删除 Excel 添加的额外引号,然后在 MySQL Workbench 中运行它,它会逐行运行它(需要一些时间),您可以看到进度。

为我节省了数小时未成功地使用“自动工具”的时间,这些工具由于未知原因而失败并且没有提供正确的日志 ootb。

警告:不要对未经清理的代码执行此操作,因为它容易受到 SQL 注入的影响。在这种情况下,它是来自 Microsoft 的数据,所以我知道这很好。

【讨论】:

    猜你喜欢
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    • 2016-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多