mysql - 如何阻止 '0000-00-00 00:00:00' 日期值进入我的 MySQL 表?

标签 mysql sql date datetime

我在 OS X 10.9.1 上使用 MySQL 5.5.37。我有一个类型为 DATETIMENOT 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 IGNOREUPDATE 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/

相关文章:

mysql - 在mysql中获取维基百科数据库?

php - 将图像上传到数据库(php)

mysql - 如何将位数据类型的所有位填充为 1?

javascript - 如何获取 00 :00:00 timestamp 的日期

php - 如何将出生日期 php/mysql yyyy/dd/mm 转换为年龄

MySQL WordPress 查询返回某些记录的距离为零

mysql - 查询给出不良结果

java - sql插入顺序不对

sql - 比较 inner join 和 where in 的用法

javascript - 将 ISO 日期转换为国际日期类型 javascript