前幾天修改了一張回答表的觸發器,結果保存草稿的時候報錯:Data truncation: Truncated incorrect datetime value: '',經排查是觸發器中一條判斷的問題,我們來看原來的語句:
IF CONCAT(new.delete_flag,new.status)!=CONCAT(old.delete_flag,old.status) AND new.delete_flag=0 AND new.status=0 AND IFNULL(new.publish_time,'')!='' AND new.publish_time>DATE_ADD(NOW(),INTERVAL -30 DAY) THEN INSERT IGNORE INTO kid_follow_feed(receiver,operator,type,content_type,content_id,time) VALUES(new.user_id,new.user_id,3,3,new.id,new.publish_time); SET v_ret = redis_command_v2('LPUSH', 'mq:CalcFollowFeed', CONCAT(json_object('oper',new.user_id,'type',3,'contentType',3,'contentId',new.id))); END IF;
原來的語句中先判斷狀態是否有變化,如果沒有變化,再判斷是否發布狀態並且有發布時間,同時發布時間要在30天之內,結果這條語句就報錯了,原因是保存草稿的時候發布時間是空字符串,修改成這樣就沒問題了:
IF new.delete_flag=0 AND new.status=0 AND IFNULL(new.publish_time,'')!='' THEN IF CONCAT(new.delete_flag,new.status)!=CONCAT(old.delete_flag,old.status) AND new.publish_time>DATE_ADD(NOW(),INTERVAL -30 DAY) THEN INSERT IGNORE INTO kid_follow_feed(receiver,operator,type,content_type,content_id,time) VALUES(new.user_id,new.user_id,3,3,new.id,new.publish_time); SET v_ret = redis_command_v2('LPUSH', 'mq:CalcFollowFeed', CONCAT(json_object('oper',new.user_id,'type',3,'contentType',3,'contentId',new.id))); END IF; END IF;