В примере № 2 возникла проблема с тестом IF. Когда одно из значений является нулевым, тест <> возвращает нулевое значение. Это приводит к тому, что тест не будет выполнен, и действие триггера не будет запущено, даже если одно значение совсем не равно нулю. Чтобы исправить это, я придумал этот тест, который использует <=> (NULL-safe равный). Надеюсь, это поможет кому-то.
DELIMITER $$
DROP TRIGGER IF EXISTS updtrigger ;
$$
CREATE TRIGGER updtrigger AFTER UPDATE
ON yourTable FOR EACH ROW
BEGIN
IF ((NEW.active <=> OLD.active) = 0) THEN
SET NEW.date = '';
END IF;
$$