搜索

首页  >  问答  >  正文

如何将 CSV 文件导入 MySQL 表?

我有一个来自客户端的非标准化事件日记 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 正在解析该文件,就好像每一新行都对应于一个数据库行。我可以毫无问题地将文件加载到 Open中。

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

更新:

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

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

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;

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

P粉785957729P粉785957729412 天前697

全部回复(2)我来回复

  • P粉057869348

    P粉0578693482023-10-10 10:07:31

    使用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-termerated-by='\t'

    回复
    0
  • P粉210405394

    P粉2104053942023-10-10 00:32:34

    问题的核心似乎是将 CSV 文件中的列与表中的列进行匹配。

    许多图形化的 mySQL 客户端对于此类事情都有非常好的导入对话框。

    我最喜欢的工作是基于 Windows 的 HeidiSQL。它为您提供了一个图形界面来构建LOAD DATA命令;您可以稍后以编程方式重复使用它。

    屏幕截图:“导入文本文件”对话框

    要打开“导入文本文件”对话框,请转至工具 > 导入 CSV 文件

    回复
    0
  • 取消回复