如何将CSV文件导入到MySQL表中?

13 浏览
0 Comments

如何将CSV文件导入到MySQL表中?

我有一个客户提供的未规范化的事件日记CSV文件,我想将其加载到MySQL表中,以便我可以重构成一个合理的格式。我创建了一个名为“CSVImport”的表,该表的每一列都对应CSV文件的一列。CSV包含99列,所以这本身就是一个很难的任务:\n

CREATE TABLE 'CSVImport' (id INT);
ALTER TABLE CSVImport ADD COLUMN Title VARCHAR(256);
ALTER TABLE CSVImport ADD COLUMN Company VARCHAR(256);
ALTER TABLE CSVImport ADD COLUMN NumTickets VARCHAR(256);
...
ALTER TABLE CSVImport Date49 ADD COLUMN Date49 VARCHAR(256);
ALTER TABLE CSVImport Date50 ADD COLUMN Date50 VARCHAR(256);

\n表上没有任何约束,并且所有字段的值都是VARCHAR(256),除了包含计数(用INT表示)、是/否(用BIT表示)、价格(用DECIMAL表示)和文本段落(用TEXT表示)的列。\n我尝试加载数据到文件中:\n

LOAD DATA INFILE '/home/paul/clientdata.csv' INTO TABLE CSVImport;
Query OK, 2023 rows affected, 65535 warnings (0.08 sec)
Records: 2023  Deleted: 0  Skipped: 0  Warnings: 198256
SELECT * FROM CSVImport;
| NULL             | NULL        | NULL           | NULL | NULL               | 
...

\n整个表填满了NULL。\n我认为问题在于文本段落中包含多行,而MySQL将文件解析为每个新行对应一个数据库行。我可以毫无问题地将文件加载到OpenOffice中。\nclientdata.csv文件包含2593行和570条记录。第一行包含列名。我认为它是用逗号分隔的,文本显然用双引号括起来。\n更新:\n当不确定时,阅读手册:http://dev.mysql.com/doc/refman/5.0/en/load-data.html\n我在LOAD DATA语句中添加了一些信息,OpenOffice足够聪明以推断出来,现在它加载了正确数量的记录:\n

LOAD DATA INFILE "/home/paul/clientdata.csv"
INTO TABLE CSVImport
COLUMNS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;

\n但仍然有很多完全是NULL的记录,并且加载的数据似乎都不在正确的位置上。

0
0 Comments

如何将CSV文件导入MySQL表?

出现的原因:

- MySQL服务器运行了--secure-file-priv选项,导致无法执行LOAD DATA INFILE语句。

- 用户没有足够的权限进行导入。

解决方法:

1. 如果MySQL服务器运行了--secure-file-priv选项,可以尝试以下解决方法:

- 使用LOAD DATA LOCAL INFILE命令代替LOAD DATA INFILE命令。

- 确保文件路径正确,并确保文件在安全文件目录中。

- 检查MySQL用户是否具有足够的权限执行该语句。

2. 如果出现错误代码1045(28000):Access denied for user 'user'@'%' (using password: YES),可以尝试以下解决方法:

- 从管理员面板中授予该用户所有权限,然后尝试重新导入脚本。

3. 如果出现错误代码1290:The MySQL server is running with the --secure-file-priv option so it cannot execute this statement,可以尝试以下解决方法:

- 使用LOAD DATA LOCAL INFILE命令代替LOAD DATA INFILE命令。

以下是一个简单的示例,展示了如何使用LOAD DATA INFILE命令将CSV文件导入MySQL表:

LOAD DATA INFILE 'c:/country.csv' 
INTO TABLE country 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS

注意:如果CSV文件是本地文件,可能需要使用LOAD DATA LOCAL INFILE命令。如果出现错误1148:"used command is not allowed",可以通过在命令行上运行mysql时加上--local-infile选项来启用它。

希望这篇文章对你有所帮助!

0
0 Comments

问题的出现的原因是在将CSV文件导入MySQL表时,需要将CSV文件中的列与表中的列进行匹配。许多图形化的MySQL客户端都有非常好的导入对话框,可以处理这种情况。对于这项工作,我最喜欢的是基于Windows的HeidiSQL。它为你提供了一个图形界面来构建LOAD DATA命令,你以后可以在程序中重复使用它。对于Mac OSX,可以使用Sequel Pro。但是某些情况下,Sequel Pro需要先创建表,而不是使用列名。然而,这不应该发生,应该在导入对话框中看到CSV文件第一行中的列。如果你想在Linux下使用HeidiSQL,可以使用Wine来运行它。对于没有GUI工具的情况,还有其他几十个答案可以解决这个问题。

0
0 Comments

如何将CSV文件导入MySQL表格?

要将表格加载到数据库中,请使用mysqlimport:

mysqlimport --ignore-lines=1 \

--fields-terminated-by=, \

--local -u root \

-p Database \

TableName.csv

我在http://chriseiffel.com/everything-linux/how-to-import-a-large-csv-file-to-mysql/找到了这个方法。

要将分隔符设置为制表符,请使用--fields-terminated-by='\t'

mysqlimport在幕后使用LOAD DATA INFILE...,所以它基本上是一样的。

与LOAD DATA INFILE一样,您需要在使用mysqlimport之前创建一张表。

文档(http://dev.mysql.com/doc/refman/5.7/en/mysqlimport.html)说mysqlimport客户端提供了与LOAD DATA INFILE相同的命令行接口,因此从理论上讲,不可能在性能上提供任何优势。

您还需要--fields-optionally-enclosed-by=\"和--fields-escaped-by=\

这是所有解决方法中最简单的一个。非常感谢。

当我使用mysqlimport导入一个大的txt文件(30G)时,我得到了错误:1205,锁等待超时,有什么建议吗?

0