由于某种原因,此命令无效,无法找出可能出错的地方。我正在使用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类型。 请帮忙
答案 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_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
在UPDATE
之前输入该行,不会出现错误
如果我正确理解documentation,则不会永久设置SQL_mode。对于永久性更改,您必须修改.cnf文件