2011-10-05 206 views
0

我有一個非常長的腳本,將csv文件導入到保存表中,執行一些按摩操作,然後將數據從保存表複製到最終表中。腳本的mysql行拒絕執行(沒有錯誤/警告)

當運行腳本,執行一切除線494:

UPDATE `database`.`holding` 
SET `rcnt_rslts`=TRUE 
WHERE `test_rcnt`=TRUE 
    AND (`rcntrslt`='pos' OR `rcntrslt`='neg' OR `rcntrslt`='indeterminate'); 

rcnt_rslts兩個表中是BOOL/TINYINT(1)和上方的下方的線幾乎是相同的並且被執行得很好。在腳本的其他地方沒有其他對rcnt_rslts的引用(通過查找/替換進行驗證)。

如果我直接將該行直接放入CMI中,它就可以工作。

是否存在行/大小限制,mysql只是隨機選取一行忽略?

編輯:如果很重要,在腳本運行後rcnt_rslts的所有值都是NULL

+0

@ muistooshort:你好。不,沒有錯誤信息或警告 – jacob

回答

1

OK,我會試試看:

1 - 也許你在做rcntrslt一個錯字,像這樣做,你只列出一次。

UPDATE `database`.holding 
SET rcnt_rslts=TRUE 
WHERE test_rcnt=TRUE 
    AND (rcntrslt IN ('pos','neg','indeterminate')); 

2- =也可以區分大小寫,LIKE從未被嘗試:

UPDATE `database`.holding 
SET rcnt_rslts=TRUE 
WHERE test_rcnt=TRUE 
    AND (rcntrslt LIKE 'pos' OR rcntrslt LIKE 'neg' OR rcntrslt LIKE 'indeterminate'); 

3-可以rcntrslt還有什麼其他的值,你不能扭轉所有的測試?

UPDATE `database`.holding 
SET rcnt_rslts = TRUE 
WHERE test_rcnt<>FALSE AND test_rcnt IS NOT NULL 
    AND (rcntrslt NOT IN ('othervalue','test1','gdsd') 
    AND rcntrslt IS NOT NULL; 

4-也許有在rcntrslt造成空格或其他非打印字符了一定的污染在那裏。

UPDATE `database`.holding 
SET rcnt_rslts=TRUE 
WHERE test_rcnt=TRUE 
    AND (rcntrslt LIKE '%pos%' OR rcntrslt LIKE '%neg%' 
     OR rcntrslt LIKE '%indeterminate%'); 

5-如果你想調試,你總是可以在那裏做一些診斷選擇,看看發生了什麼。

CREATE TABLE log (
    id integer auto_increment not null primary key, 
    logtime timestamp, 
    reason varchar(255) not null, 
    tablename varchar(255) not null, 
    fieldnames varchar(10000) not null, 
    values varchar(10000) not null, 
    INDEX log_time (logtime), 
    INDEX log_table (tablename), 
    INDEX log_reason (tablename, reason)) ENGINE = InnoDB; 

INSERT INTO log (reason, tablename, fieldnames, values) 
    SELECT 
    'all values','holding', 'test_rcnt,rcntrslt' 
    , CONCAT(IFNULL(test_rcnt,'NULL'), ',' ,IFNULL(rcntrslt,'NULL') 
    FROM holding; 

INSERT INTO log (reason, tablename, fieldnames, values) 
    SELECT 
    'test_rcnt = TRUE','holding', 'test_rcnt,rcntrslt' 
    , CONCAT(IFNULL(test_rcnt,'NULL'), ',' ,IFNULL(rcntrslt,'NULL') 
    FROM holding 
    WHERE test_rcnt = TRUE; 

現在檢查日誌,看看有什麼是錯的。

+0

根據所使用的排序規則,我認爲'='和'LIKE'區分大小寫(或不區分大小寫)。 –

+0

@ypercube,沒有LIKE永遠不區分大小寫。 – Johan

+0

@Johan,謝謝你的迴應。我不得不離開生意,所以我剛剛陷入困境。將盡快嘗試。謝謝! – jacob

相關問題