Dav*_*ave 1 mysql sql datetime date
我在OS X 10.9.1上使用MySQL 5.5.37.我有一个NOT NULL类型的列DATETIME.如果不使用触发器,如何阻止'0000-00-00 00:00:00'的值进入我的列?我会接受CURRENT_TIMESTAMP的值来代替所有的零.
我试过了:
SET sql_mode = 'NO_ZERO_DATE';
Run Code Online (Sandbox Code Playgroud)
运行上面的内容后,我仍然可以在表格中插入零日期.
如果不使用触发器(您声明的条件),则不能.但是,根据MySQL文档,
该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模式.但即便如此,正如一位评论者指出的那样,这并不一定有效.并且MySQL也会忽略检查约束,因此也无法正常工作.如果你不想使用触发器,你就会陷入困境.