2012-07-10 106 views
0

我试图将数据加载到表中(显然?)。我的表看起来像这样:Mysql LOAD DATA INFILE - 输入数据意外地被截断

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

它只会加载前两个列(散列,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,输入文件中没有不可打印的字符。

帮助!

+1

将NOT NULL约束添加到三个mising列只是导致它们被填充为0 – symcbean 2012-07-10 12:14:20

+0

尝试添加以'\ n'开头的行'''' – jcho360 2012-07-10 12:18:24

+0

删除引号并没有帮助 – symcbean 2012-07-10 12:18:48

回答

1

从来没有设法解决这个问题。我结束了写一个PHP脚本来映射数据到数据库。

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) 
+0

不 - 尝试加载它没有引号围绕枚举,它没有任何影响。 ''''结尾的字段导致哈希和ihash列填充,枚举为空(尽管非空约束)并且时间戳为空。 – symcbean 2012-07-10 13:16:29

+0

好奇 - 它适用于我的表定义和数据。 MySQL 5.5.15。 – Thilo 2012-07-10 13:26:29

+0

看看你的警告(显示警告限制10);你可能会看到我看到的内容:“数据被截断为”id“列”,这表明它正在读取第一个字段的逗号然后数据太长,所以这肯定是明确指定字段分隔符和外壳的问题 – Thilo 2012-07-10 13:31:48

1

只需添加一些改善蒂洛的答案,如果您使用的是Windows。

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

+0

我没有使用NSWindows - 但在发布原始问题之前,我做了检查 - 文件中没有回车: – symcbean 2012-07-13 08:19:16

+0

但我会检查FIELDS TERMINATED BY – symcbean 2012-07-13 08:20:51

1

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

1

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