我有一个来自客户端的非规范化事件日记CSV,我试图将其加载到MySQL表中,以便我可以重构成一个正常的格式。我创建了一个名为“CSVImport”的表,它有一个字段为CSV文件的每一列。CSV包含99列,所以这本身就已经是一项艰巨的任务:

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);

表上没有约束,所有字段都包含VARCHAR(256)值,除了包含计数(用INT表示)、是/否(用BIT表示)、价格(用DECIMAL表示)和文本介绍(用text表示)的列。

我尝试将数据加载到文件中:

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               | 
...

整个表被NULL填充。

我认为问题在于文本简介包含多行,MySQL解析文件时就好像每个新行对应一个数据库行一样。我可以毫无问题地将文件加载到OpenOffice中。

csv文件包含2593行和570条记录。第一行包含列名。我认为它是用逗号分隔的,文本显然是用双引号分隔的。

更新:

如果有疑问,请阅读手册:http://dev.mysql.com/doc/refman/5.0/en/load-data.html

我在LOAD DATA语句中添加了一些OpenOffice智能推断的信息,现在它加载了正确数量的记录:

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;

但是仍然有很多完全为空的记录,没有一个数据被加载似乎在正确的地方。


当前回答

最简单的方法,我已经导入200+行是以下命令在phpmyadmin sql窗口

我有一个简单的国家表,有两列 CountryId, CountryName

这里是.csv数据

下面是命令:

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

记住一件事,永远不要出现在第二列,否则导入将停止

其他回答

如果你使用的是装有Excel电子表格的windows电脑,那么新的mySql插件将会是非凡的。甲骨文的人在这个软件上做得很好。您可以直接从Excel建立数据库连接。这个插件会分析你的数据,并为你建立与数据一致的表格。我有一些超大的csv文件要转换。这个工具大大节省了时间。

http://dev.mysql.com/downloads/windows/excel/

您可以从Excel内部进行更新,这些更新将在线填充到数据库中。这对于在超级便宜的GoDaddy共享主机上创建的mySql文件非常有效。(注意,当你在GoDaddy上创建表时,你必须选择一些非标准设置来启用数据库的离线访问…)

有了这个插件,你可以在XL电子表格和在线mySql数据存储之间实现纯交互。

以下是excel文件截图示例:

另存为并选择.csv。

如果您使用notepad++或任何其他记事本打开,您将会看到如下所示的.csv数据屏幕截图。

确保在.csv中删除标题和列对齐,就像在mysql表中一样。 将folder_name替换为文件夹名称

加载数据本地文件 “D: / folder_name / myfilename.csv” 进入表格邮件 以','结尾的字段 (fname,lname,email, phone);

如果大数据,你可以拿着咖啡装!

这就是你所需要的。

当执行MySQL查询导入CSV时,我得到了错误 错误代码:1290。MySQL服务器使用——secure-file-priv选项运行,因此无法执行此语句。

所以我把文件移到安全文件位置

LOAD DATA INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/Orders.csv'   
INTO TABLE orderdetails.orders 
FIELDS TERMINATED BY ','  
 ENCLOSED BY '"'
 LINES TERMINATED BY '\n'
 IGNORE 1 ROWS

文件的位置是“C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/Orders.csv”,这是因为,我将我的CSV文件移动到“secure_file_priv”位置,否则我就会得到上面的错误

你可以通过查询SHOW VARIABLES LIKE "secure_file_priv"来获得你的secure_file_priv;

来源:导入CSV文件到MySQL(查询或使用Workbench)

如果你正在使用MySQL工作台(目前是6.3版本),你可以通过以下方法来做到这一点:

右键点击“表格”; 选择表数据导入向导; 选择您的csv文件,并按照说明(JSON也可以使用); 这样做的好处是,您可以根据希望将数据导入或加载到现有表的csv文件创建一个新表

如何将csv文件导入sql表

文件示例:Overseas_trade_index data CSV文件

步骤:

Need to create table for overseas_trade_index. Need to create columns related to csv file. SQL Query: ( id int not null primary key auto_increment, series_reference varchar (60), period varchar (60), data_value decimal(60,0), status varchar (60), units varchar (60), magnitude int(60), subject text(60), group text(60), series_title_1 varchar (60), series_title_2 varchar (60), series_title_3 varchar (60), series_title_4 varchar (60), series_title_5 varchar (60), ); Need to connect mysql database in terminal. =>show databases; =>use database; =>show tables; Please enter this command to import the csv data to mysql tables. load data infile '/home/desktop/Documents/overseas.csv' into table trade_index fields terminated by ',' lines terminated by '\n' (series_reference,period,data_value,status,units,magnitude,subject,series_title1,series_title_2,series_title_3,series_title_4,series_title_5); Find this overseas trade index data on sqldatabase: select * from trade_index;