我在 OS X 10.9.1 上使用 MySQL 5.5.37。我有一个类型为 DATETIME
的 NOT NULL
列。在不使用触发器的情况下,如何阻止值“0000-00-00 00:00:00”进入我的列?我将接受 CURRENT_TIMESTAMP 值来代替所有零。
我试过:
SET sql_mode = 'NO_ZERO_DATE';
运行上述命令后,我仍然能够在我的表中插入一个零日期。
最佳答案
如果不使用触发器(您陈述的条件),您就不能。然而,根据the MySQL documentation ,
NO_ZERO_DATE
模式会影响服务器是否允许“0000-00-00”作为有效日期。 其效果还取决于是否启用了严格的SQL
模式。
如果此模式未启用,则允许“0000-00-00”并且插入不会产生警告。
如果启用此模式,则允许“0000-00-00”并且插入会产生警告。
如果启用此模式和严格模式,则不允许 '0000-00-00' 并且插入会产生错误,除非同时给出
IGNORE
。对于INSERT IGNORE
和UPDATE IGNORE
,允许使用 '0000-00-00' 并且插入会产生警告。
所以你应该确保也启用了严格的 SQL 模式。但即便如此,作为a commenter has pointed out ,这不一定有效。并且 MySQL 也忽略了检查约束,因此这也不起作用。如果你不想 use a trigger ,你卡住了。
关于mysql - 如何阻止 '0000-00-00 00:00:00' 日期值进入我的 MySQL 表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23375577/