mysql - 需要允许 '0000-00-00 00:00:00' 日期

Rat*_*Rao 3 mysql

我希望在 MySQL 中允许零日期。我已更改sql_modeALLOW_INVALID_DATES,NO_ENGINE_SUBSTITUTION.

我已经在/etc/mysql/my.cnf.

但是,当我尝试插入数据时出现错误,

数据截断:日期时间值不正确:'0000-00-00 00:00:00'

MySQL 版本为 5.7.18。

对此的任何想法都会有很大帮助。

Waq*_*leh 8

要允许零日期 (0000-00-00 00:00:00),您需要删除该限制。

要删除特定的 SQL 模式(在本例中为NO_ZERO_DATE),请找到当前的 SQL 模式:

SELECT @@GLOBAL.sql_mode;
Run Code Online (Sandbox Code Playgroud)

复制结果并从中删除您不需要的内容(NO_ZERO_DATE

例如:

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Run Code Online (Sandbox Code Playgroud)

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Run Code Online (Sandbox Code Playgroud)

创建并打开此文件:

sudo vim /etc/mysql/conf.d/disable_strict_mode.cnf
Run Code Online (Sandbox Code Playgroud)

并将您的新 SQL 模式写入并粘贴到其中:

[mysqld]
sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Run Code Online (Sandbox Code Playgroud)

重启 MySQL:

sudo service mysql restart
Run Code Online (Sandbox Code Playgroud)


小智 -1

不言而喻,你做错了。如果您打算不存储任何内容,则该列应该可以为空,并且当您应该使用 NULL 时,不应尝试插入空字符串。

不过,请考虑一下:

如果严格模式未生效,MySQL 会插入无效或缺失值的调整值并产生警告。但是当严格模式生效时......

对于事务表,当启用 STRICT_ALL_TABLES 或 STRICT_TRANS_TABLES 时,数据更改语句中的值无效或缺失会出现错误。该语句被中止并回滚

http://dev.mysql.com/doc/refman/5.6/en/sql-mode.html#sql-mode-strict 选择@@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

注意:我不建议这样做。我只是回答如何做。在我看来,最好清理查询和数据,并为非空列提供良好的默认值。