我想在MySQL中允许零日期。我已将sql_mode
更改为ALLOW_INVALID_DATES,NO_ENGINE_SUBSTITUTION
。mysql - 需要允许'0000-00-00 00:00:00'日期
我已将其更改为/etc/mysql/my.cnf
。
然而,我当我尝试插入数据出现错误,
数据截断:不正确的日期时间值: '0000-00-00 00:00:00'
的MySQL版本是5.7.18。
任何想法都会有很大的帮助。
我想在MySQL中允许零日期。我已将sql_mode
更改为ALLOW_INVALID_DATES,NO_ENGINE_SUBSTITUTION
。mysql - 需要允许'0000-00-00 00:00:00'日期
我已将其更改为/etc/mysql/my.cnf
。
然而,我当我尝试插入数据出现错误,
数据截断:不正确的日期时间值: '0000-00-00 00:00:00'
的MySQL版本是5.7.18。
任何想法都会有很大的帮助。
它不应该说你做错了。如果您打算不存储任何内容,该列应该为空,并且当您应该使用NULL时,您不应尝试插入空字符串。
考虑这一点,虽然:
如果严格模式不生效,MySQL的插入调整值无效或遗漏值,并产生警告。 但是,当严格模式生效时...
对于事务性表,当启用STRICT_ALL_TABLES或STRICT_TRANS_TABLES时,数据更改语句中的无效值或缺失值发生错误。该声明被中止并回滚
http://dev.mysql.com/doc/refman/5.6/en/sql-mode.html#sql-mode-strict SELECT @@ SQL_MODE;应该显示您正在运行(至少)STRICT_TRANS_TABLES。虽然这不是5.6的内部默认值,但它包含在默认的5.6配置文件中。如果您需要旧的行为,您需要将其删除并重新启动服务器。
...虽然你应该考虑让你的代码更加正确。
尝试启用此
ALLOW_INVALID_DATES
http://dev.mysql.com/doc/refman/5.6/en/sql-mode.html#sqlmode_allow_invalid_dates
注:我不建议这样做。我只是在回答如何去做。在我看来,最好清理查询和数据,并为非空列提供良好的默认值。
OP已启用ALLOW_INVALID_DATES。这正是问题:启用了ALLOW_INVALID_DATES,但是当使用零日期时,MySQL提供了一个错误。 – Shadow
你可能想了解其他的模式设置,如严格和NO_ZERO_IN_DATE和NO_ZERO_DATE https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_no_zero_date
,我要在这里假设你想有一个有效的日期,使您的查询从来没有检查NULL 。
做到这一点的一种方法是使用我喜欢称为“永久”日期的东西。
这些实质上是DATETIME数据类型允许的最小/最大日期。
在我的使用中,通常存在从 - 到成对的“窗口”,但您可能只需要最短的日期。
的DATETIME类型用于包含日期和时间 份值。 MySQL的检索并在 'YYYY-MM-DD HH:MM:SS' 显示DATETIME值格式。支持的范围是'1000-01-01 00:00:00'至 '9999-12-31 23:59:59'。
所以,一种可能适合你的方法是利用'1000-01-01 00:00:00'而不是零日期。
哪些数据是,当这个错误发生在你插入?为什么你需要允许无效的日期? –
您是否重新启动服务器? – Igor
嗯,我想'varchar'领域。那么,为什么你不使用'varchar'?当你执行选择,更新,删除,......你可以用'日期转换()''一样SELECT ID FROM MY_TABLE其中date(my_date_1)> DATE(my_date_2)ORDER BY DATE(my_date_3)DESC' ... 而...您可以检查是否是零日期像'WHERE my_date_1 =“0000-00-00 00:00:00'' –