2011-10-05 208 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

相关问题