我正在尝试更新NULL的日期字段,以便在其中包含“0000-00-00”。我在尝试:
UPDATE `results` SET `date_of_birth` = '0000-00-00' WHERE `date_of_birth` IS NULL
但是当我模拟它时,它会显示0个匹配的记录。但是,如果我运行它,它会带回31条记录:
SELECT * FROM `results` WHERE `date_of_birth` IS NULL
似乎是矛盾的,或者我只是遗漏了一些东西。
有什么想法吗?
答案 0 :(得分:1)
如果此列具有类型日期,则不能使用任何语句来更新不包含正确日期值的语句。
UPDATE `results` SET `date_of_birth` = '' WHERE `date_of_birth` = '' or cast(`date_of_birth` as date) is null or `date_of_birth` is null;
#With no strict mode.
UPDATE `results` SET `date_of_birth` = '0000-00-00' WHERE `date_of_birth` = '' or cast(`date_of_birth` as date) is null or `date_of_birth` is null;
答案 1 :(得分:0)
检查你的sql.mode
检查MYSQL模式
SELECT @@GLOBAL.sql_mode global, @@SESSION.sql_mode session
严格模式会影响服务器是否允许'0000-00-00'作为有效日期:如果未启用严格模式,则允许使用'0000-00-00'并且插入不会产生警告。如果启用了严格模式,则不允许使用'0000-00-00',并且插入会产生错误,除非同时给出了IGNORE。对于INSERT IGNORE和UPDATE IGNORE,允许使用'0000-00-00'并且插入会产生警告。