2014-07-08 33 views
0

如果我嘗試按不同的順序加載相同的兩行數據,我會得到一個錯誤,一個嘗試,另一個成功。MySQL LOAD DATA INFILE錯誤通過數據行的順序觸發

CREATE TABLE `test` (
    `date` varchar(20) NOT NULL DEFAULT '', 
    `val1` float DEFAULT NULL, 
    `val2` smallint(6) DEFAULT NULL 
) ENGINE=MyISAM DEFAULT CHARSET=latin1; 

fail.txt

Date,Val1,Val2 
3/30/2004,,17 
4/4/2004,91.4210526315789,20 

pass.txt

Date,Val1,Val2 
4/4/2004,91.4210526315789,20 
3/30/2004,,17 

相同的命令不同的結果

-> LOAD DATA INFILE '/tmp/fail.txt' REPLACE INTO TABLE `test` FIELDS TERMINATED BY ',' IGNORE 1 LINES; 
<- ERROR 1265 (01000) at line 1: Data truncated for column 'val1' at row 1 
-> SELECT * FROM test; 
<- Empty set (0.00 sec) 

-> LOAD DATA INFILE '/tmp/pass.txt' REPLACE INTO TABLE `test` FIELDS TERMINATED BY ',' IGNORE 1 LINES; 
-> SELECT * FROM test; 
<- +-----------+---------+------+ 
<- | date  | val1 | val2 | 
<- +-----------+---------+------+ 
<- | 4/4/2004 | 91.4211 | 20 | 
<- | 3/30/2004 |  0 | 17 | 
<- +-----------+---------+------+ 
<- 2 rows in set (0.00 sec) 

予刪除該表和嘗試之間重新創建。

這是使用:mysqld的版本5.6.15的osx10.7在x86_64(MySQL社區服務器(GPL))

有什麼我可以做,使fail.txt將加載而不編輯數據?

編輯:

對於它的價值,我現在相信這個問題是關係到MySQL服務器版本和/或配置我跑。針對另一個mysqld(Ubuntu上的5.5.32),fail.txt加載沒有錯誤。

編輯2:

好像我應該能像下面這樣,但我不知道的第二個參數REPLACE應該是什麼。

LOAD DATA INFILE '/tmp/fail.txt' REPLACE INTO TABLE `test` 
FIELDS TERMINATED BY ',' IGNORE 1 LINES 
(date, @val1, val2) 
SET val1 = REPLACE(@val1, '', '\N'); 

編輯3:

想通了這一點:

LOAD DATA INFILE '/tmp/fail.txt' REPLACE INTO TABLE `test` 
FIELDS TERMINATED BY ',' IGNORE 1 LINES 
(date, @val1, val2) 
SET val1 = IF(LENGTH(@val1) = 0, NULL, @val); 

回答

0

EDIT 3的問題。以下爲我工作。

LOAD DATA INFILE '/tmp/fail.txt' REPLACE INTO TABLE `test` 
FIELDS TERMINATED BY ',' IGNORE 1 LINES 
(date, @val1, val2) 
SET val1 = IF(LENGTH(@val1) = 0, NULL, @val); 
0

您必須輸入在第一線列val值。

改變你的文件來自:

Date,Val1,Val2 
3/30/2004,,17 
4/4/2004,91.4210526315789,20 

TO

Date,Val1,Val2 
3/30/2004,0,17 
4/4/2004,91.4210526315789,20 

或看到MySQL文檔:

當閱讀與LOAD DATA INFILE,空或缺少列的數據 更新與''。如果您想在列中使用NULL值,則應在數據文件中使用 \ N。在某些情況下,字面詞「NULL」也可用於 。

chnage它:

Date,Val1,Val2 
3/30/2004,\N,17 
4/4/2004,91.4210526315789,20 
+0

對不起,但這仍然不能解釋的事情。相同的空字段(',,')可以作爲pass.txt中第二行的一部分。 – Jobu

+0

@jobu如果你在第一個文件中改變它,你會得到錯誤信息?你可以添加桌子的ddl嗎? – Jens

+0

DDL包含在問題中。請參閱CREATE TABLE語句。 – Jobu