MySQL 导入 - CSV - 文件拒绝正确导入
MySQL import - CSV - file refuses to be properly imported
我正在尝试将以下文件导入 MySQL Db:
https://drive.google.com/drive/folders/1WbRdNgqVre3wN4DpJZ-08jtGkJtCDJNQ?usp=sharing
在 MySql Workbench 上使用“数据导入向导”,出于某种原因,我得到“成功导入 2183 行”,而文件包含接近 100K。
我试着在第 210-230 行周围寻找特殊字符,也删除了所有字符,但仍然发生同样的情况。
该文件是 Microsoft Bing 地理位置的 CSV,用于 Microsoft 广告活动,从 Microsoft 网站下载(使用那里的广告帐户)。
我一直在谷歌搜索、阅读、Whosebuging、处理文件和不同的导入选项...
我试着把文件切成小块,但新创建的文件不知何故完全损坏了...
编码好像是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
。
帮忙?
结语:最后我放弃了所有这些导入向导,并采用了旧的“从 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 的数据,所以我知道它没问题。
我正在尝试将以下文件导入 MySQL Db:
https://drive.google.com/drive/folders/1WbRdNgqVre3wN4DpJZ-08jtGkJtCDJNQ?usp=sharing
在 MySql Workbench 上使用“数据导入向导”,出于某种原因,我得到“成功导入 2183 行”,而文件包含接近 100K。 我试着在第 210-230 行周围寻找特殊字符,也删除了所有字符,但仍然发生同样的情况。
该文件是 Microsoft Bing 地理位置的 CSV,用于 Microsoft 广告活动,从 Microsoft 网站下载(使用那里的广告帐户)。 我一直在谷歌搜索、阅读、Whosebuging、处理文件和不同的导入选项...
我试着把文件切成小块,但新创建的文件不知何故完全损坏了... 编码好像是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
。
帮忙?
结语:最后我放弃了所有这些导入向导,并采用了旧的“从 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 的数据,所以我知道它没问题。