在MySQL中创建了一个INSERT型触发器,用于检查一个默认为NULL的字段create_time是否为NULL,若为NULL则取当前时间对其赋值。发现一个关于ISNULL()函数的奇怪现象:使用”ISNULL(字段名)“提示出错,而使用”字段名 IS NULL“就能正常:
CREATE TRIGGER t_i_table_trouble BEFORE INSERT ON table_trouble FOR EACH ROW
BEGIN
IF ISNULL(NEW.create_time) THEN
SET NEW.create_time=now();
END IF;
END
此时若向表中添加一条记录,则提示添加失败。
如果将ISNULL()改为IS NULL:
CREATE TRIGGER t_i_table_trouble BEFORE INSERT ON table_trouble FOR EACH ROW
BEGIN
IF NEW.create_time IS NULL THEN
SET NEW.create_time=now();
END IF;
END
此时若向表中添加一条同样的记录,则提示添加成功!
为何会这样呢?让人百思不得其解
mysql存在不少奇怪问题。
这种问题可能跟版本和使用场景有关系。
isnull 要这么用, ifnull(NEW.create_time,'')='' 要么就用 is null