0

我正在尝试将数据加载到表中(显然?)。我的表如下所示:

CREATE TABLE IF NOT EXISTS `condensed` (
  `id` bigint(20) NOT NULL,
  `src` enum('C_X','C_AH','C_AO','C_B','H_X','H_AH','H_AO','H_B') NOT NULL,
  `hash` int(11) default NULL,
  `ihash` int(11) default NULL,
  `last_updated` datetime default NULL,
  PRIMARY KEY  (`id`,`src`),
  UNIQUE KEY `covering` (`id`,`src`,`hash`)
) ENGINE=MyISAM DEFAULT CHARSET=ascii;

我的数据文件如下所示:

320115816,'C_X',692983698,854142703,20120216220954
320124536,'C_X',588472049,1059436251,20100527232845
320120196,'C_X',452117509,855369958,20101118105505
...

但是当我使用加载它时

LOAD DATA INFILE '/path/to/data.csv' 
IGNORE
INTO TABLE `condensed` 
(id, src, hash, ihash, last_updated);

它只加载前两列(hash、ihash 和 last_updated 为空)。

320115816,'C_X',NULL,NULL,NULL
320124536,'C_X',NULL,NULL,NULL
320120196,'C_X',NULL,NULL,NULL
...

我确实收到了很多警告(大概是因为 mysql 正在丢弃输入集中的 3 列并分配默认值)

Query OK, 20 rows affected, 100 warnings (0.00 sec)
Records: 20  Deleted: 0  Skipped: 0  Warnings: 100

(我打算加载几百万条记录 - 而不仅仅是 20 条)

我使用 mysqlimport 遇到了同样的问题。

从 LOAD DATA 语句中省略显式字段列表(数据库中的字段和顺序与文件中的相同)会导致相同的结果。

MySQL 版本是 5.0.22,输入文件中没有不可打印的字符。

帮助!

4

5 回答 5

1

如果您使用的是 Windows,只需对 Thilo 的答案进行一些改进。

LOAD DATA INFILE '/path/to/data.csv' IGNORE 
INTO TABLE `condensed` 
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '\''
LINES TERMINATED BY '\r\n' --Windows right line terminator
(id, src, hash, ihash, last_updated)

它对我有用。它解决了我在 Windows 上的所有截断问题。也看看这个: http: //forums.mysql.com/read.php?79,76131,76871

于 2012-07-12T12:39:59.460 回答
1

从来没有设法解决这个问题。我最终编写了一个 php 脚本来将数据映射到数据库中。

于 2013-04-23T08:43:01.960 回答
1

我在 IBM 大型机上创建的 CSV 文件遇到了类似的问题,该文件在加载之前已移动到 Windows 文件服务器。除了最后一行,我在所有行上都收到了截断警告。大型机文件看起来不错。添加 '\r\n' 清除了问题。

于 2017-06-26T13:48:57.493 回答
1

值得注意的是,如果 MySQL 抱怨的字段恰好是表中的最后一个,那么您可能需要修复 FIELDS TERMINATED BY。在 Windows 上,我必须告诉它 \n 而不是 \r\n。

于 2015-12-02T22:37:41.760 回答
0

我认为只有 enum 字段的引号会混淆导入。尝试这个:

LOAD DATA INFILE '/path/to/data.csv' IGNORE 
INTO TABLE `condensed` 
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '\''
(id, src, hash, ihash, last_updated)
于 2012-07-10T12:37:42.657 回答