更新mysql中的Datetime列

时间:2017-08-22 08:03:01

标签: mysql datetime

由于某种原因,此命令无效,无法找出可能出错的地方。我正在使用mysql,这是命令:

update users set regdate = '2017-06-30 15:08:24' where regdate = '0000-00-00 00:00:00'

这是错误消息

Incorrect datetime value: '0000-00-00 00:00:00' for column 'regdate' at row 1

regdate字段是datetime类型。 请帮忙

2 个答案:

答案 0 :(得分:1)

请勿存储此类日期。你有什么意义,在你的数据库中有这样的日期(浪费空间)?

而是让您的列可以为空并存储NULL而不是'0000-00-00 00:00:00'

使用

更改列定义
ALTER TABLE your_tablename MODIFY COLUMN your_columnname datetime NULL;

你设置的sql_modes是一个好主意,它们只是防止在你的数据库中有垃圾。我不会改变它们。

唯一的“消极”方面是,您必须稍微调整一下您的查询。 NULL“值”根本不是一个值,它实际上是“没有价值”(这就是为什么你会节省一些空间)。因此,当您想要找到这样的日期时,您无法做到

SELECT * FROM your_table WHERE datetime_column = NULL;

你必须使用像

这样的特殊比较运算符
SELECT * FROM your_table WHERE datetime_column IS NULL;

但这不是一个真正的问题。改变sql_mode的另一种方法是“更舒适,但更危险”。

答案 1 :(得分:1)

感谢@ lad2025提出正确的问题。 要更改这些设置,您可以使用:

SET SQL_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_D‌​IVISION_BY_ZERO,NO_A‌​UTO_CREATE_USER,NO_E‌​NGINE_SUBSTITUTION';

UPDATE之前输入该行,不会出现错误

如果我正确理解documentation,则不会永久设置SQL_mode。对于永久性更改,您必须修改.cnf文件