2012-07-10 43 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'清除了問題。