我想在MySQL中允许零日期。我已将sql_mode
更改为ALLOW_INVALID_DATES,NO_ENGINE_SUBSTITUTION
。
我在/etc/mysql/my.cnf
更改了它。
然而,当我尝试插入数据时,我得到了错误,
数据截断:日期时间值不正确:' 0000-00-00 00:00:00'
MySQL版本是5.7.18。
任何关于此的想法都会有很大的帮助。
答案 0 :(得分:1)
您可能想了解其他模式设置,例如strict和NO_ZERO_IN_DATE以及NO_ZERO_DATE https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_no_zero_date
答案 1 :(得分:1)
要允许零日期(0000-00-00 00:00:00),您需要删除该限制。
要删除特定的SQL模式(在本例中为 NO_ZERO_DATE ),请找到当前的SQL模式:
SELECT @@GLOBAL.sql_mode;
复制结果并从中删除不需要的内容( 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
到
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
创建并打开此文件:
sudo vim /etc/mysql/conf.d/disable_strict_mode.cnf
并写入新的SQL模式并粘贴到其中:
[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
重新启动MySQL:
sudo service mysql restart
答案 2 :(得分:0)
我将在此假设您希望拥有一个有效的日期,以便您的查询永远不必检查NULL。
这样做的一种方法是使用我喜欢称之为“In perpetuity”的日期。
这些基本上是DATETIME数据类型允许的最小/最大日期。
在我的使用中,通常存在从 - 到对的“窗口”,但您可能只需要最小日期。
DATETIME类型用于包含日期和时间的值 部分。 MySQL在'YYYY-MM-DD中检索并显示DATETIME值 HH:MM:SS'格式。支持的范围是'1000-01-01 00:00:00'到 '9999-12-31 23:59:59'。
所以可能对您有用的一种方法是利用'1000-01-01 00:00:00'而不是零日期。
答案 3 :(得分:0)
我可以通过使用zeroDateTimeBehavior = convertToNull
来解决这个问题答案 4 :(得分:0)
我更新表时的解决方案
SET sql_mode='';
UPDATE tnx_k2_items
SET created_by = 790
, modified = '0000-00-00 00:00:00'
, modified_by = 0
答案 5 :(得分:-1)
不用说,你做错了。如果您打算不存储任何内容,该列应该可以为空,并且当您应该使用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
注意:我不建议这样做。我只是回答如何做到这一点。在我看来,最好清理查询和数据,并为非空的列提供良好的默认值。