社区首页 >问答首页 >设置日期或日期时间默认值时MySQL中的错误

设置日期或日期时间默认值时MySQL中的错误
EN

Stack Overflow用户
提问于 2016-04-02 06:11:45
回答 16查看 281.3K关注 0票数 170

我运行的是MySql服务器5.7.11,这句话是:

代码语言:javascript
代码运行次数:0
复制
updated datetime NOT NULL DEFAULT '0000-00-00 00:00:00'

不工作吗?给出错误:

代码语言:javascript
代码运行次数:0
复制
ERROR 1067 (42000): Invalid default value for 'updated'

但以下各点:

代码语言:javascript
代码运行次数:0
复制
updated datetime NOT NULL DEFAULT '1000-01-01 00:00:00'

只是在工作

同样的约会案件。

作为一个侧面,MySQL文档中提到了这一点:

日期类型用于日期部分的值,但不用于时间部分。MySQL检索并以‘YYYY DD’格式显示日期值.支持范围为“1000-01-01”到“9999-12-31”。

即使他们也说:

无效的日期、日期或时间戳值转换为相应类型(“0000-00-00”或“0000-00-00:00:00”)的“零”值。

考虑到MySQL文档的第二个引用,有人能让我知道为什么会出现这个错误吗?

EN

回答 16

Stack Overflow用户

回答已采纳

发布于 2016-04-02 06:46:59

错误是因为sql模式,它可以是严格的模式,如最新的MYSQL 5.7文档所示

MySQL文档5.7说

严格模式会影响服务器是否允许“0000-00-00”作为有效日期:如果不启用严格模式,则允许“0000-00-00”,并且插入不会产生警告。如果启用了严格模式,则“0000-00-00”是不允许的,插入也会产生错误,除非同时给出忽略。对于插入忽略和更新忽略,允许“0000-00-00”,插入将产生警告。

检查MYSQL模式

SELECT @@GLOBAL.sql_mode global, @@SESSION.sql_mode session

禁用STRICT_TRANS_TABLES模式

但是,要允许格式0000-00-00 00:00:00,您必须在mysql配置文件或命令中禁用STRICT_TRANS_TABLES模式。

By命令

SET sql_mode = '';

SET GLOBAL sql_mode = '';

使用关键字GLOBAL需要超级工具,从那时起它会影响所有客户端连接的操作。

如果上面没有工作,请转到/etc/mysql/my.cnf (如per )并注释掉STRICT_TRANS_TABLES

另外,如果您希望在服务器启动时永久设置sql模式,那么在Linux或SET sql_mode=''上的my.cnf中包括my.cnf。对于windows,这必须在my.ini文件中完成。

Note

但是,在MYSQL 5.6中,默认情况下不启用严格模式。因此,它不会像MYSQL 6文档那样产生错误。

MySQL允许您将“零”值“0000-00-00”存储为“虚拟日期”。在某些情况下,这比使用空值更方便,并且使用更少的数据和索引空间。若要不允许“0000-00-00”,请启用NO_ZERO_DATE SQL模式。

更新

关于臭虫的问题,正如@Dylan所说:

我不认为这是一个bug,它是随着时间的推移而演变的MYSQL的方式,由于这些原因,一些事情是根据产品的进一步改进而改变的。

但是,关于NOW()函数,我有另一个相关的bug报告

Datetime字段不接受默认的NOW()

另一个有用的注意事项[见时间戳和日期时间的自动初始化和更新]

从MySQL 5.6.5开始,时间戳和日期时间列可以自动初始化并更新到当前日期和时间(即当前时间戳)。在5.6.5之前,这只适用于时间戳,每个表最多只有一个时间戳列。下面的说明首先描述MySQL 5.6.5及更高版本的自动初始化和更新,然后描述5.6.5之前版本的不同之处。

关于 NO_ZERO_DATE的更新

从5.7.4开始,MySQL就不再推荐这种模式了。对于以前的版本,您必须注释掉配置文件中的相应行。参考日期

票数 282
EN

Stack Overflow用户

发布于 2016-10-16 12:22:42

使用MySql 5.7.14时,WAMP 3.0.6出现了此错误。

解决方案

更改c:\wamp\bin\mysql\mysql5.7.14\my.ini文件中的第70行(如果ini文件未被触摸),请从

代码语言:javascript
代码运行次数:0
复制
sql-mode= "STRICT_ALL_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_DATE,NO_ZERO_IN_DATE,NO_AUTO_CREATE_USER"

代码语言:javascript
代码运行次数:0
复制
sql-mode="ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_DATE,NO_ZERO_IN_DATE,NO_AUTO_CREATE_USER"

并重新启动所有服务。

这将禁用严格模式。根据文档,“严格模式”是指启用了STRICT_TRANS_TABLESSTRICT_ALL_TABLES或两者之一的模式。文档说:

MySQL 5.7中的默认SQL模式包括以下模式: 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。

票数 26
EN

Stack Overflow用户

发布于 2018-10-22 05:54:36

我遇到了一种情况,即日期字段的数据介于NULL和0000-00-00之间。但我不知道如何将“0000-00-00”更新为空,因为

代码语言:javascript
代码运行次数:0
复制
 update my_table set my_date_field=NULL where my_date_field='0000-00-00'

不再被允许了。我的解决办法很简单:

代码语言:javascript
代码运行次数:0
复制
update my_table set my_date_field=NULL where my_date_field<'0000-01-01'

因为所有不正确的my_date_field值(无论是否正确的日期)都来自于此日期之前。

票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36374335

复制
相关文章
MySQL 中的日期时间类型
各类型都有具体的取值范围,超出或非法的其他值时,MySQL 会回退到 0。TIMESTAMP 类型是个例外,给它设置一个超出范围的值时,将保存上该类型允许的最大值。
星哥玩云
2022/08/18
6.8K0
Mysql 中的日期时间函数汇总
MySQL中内置了大量的日期和时间函数,能够灵活、方便地处理日期和时间数据,本节就简单介绍一下MySQL中内置的日期和时间函数。
跟着飞哥学编程
2023/02/10
18.5K0
Mysql 中的日期时间函数汇总
mysql日期时间类型
表示1901-2155年   预留 0000年 表示   错误时的选择 
明明如月学长
2021/08/27
4.9K0
MySQL 日期时间加减
强烈推介IDEA2020.2破解激活,IntelliJ IDEA 注册码,2020.2 IDEA 激活码
Java架构师必看
2021/10/19
7.8K0
[864]mysql日期时间函数
sysdate() 日期时间函数跟 now() 类似,不同之处在于:now() 在执行开始时值就得到了, sysdate() 在函数执行时动态得到值。看下面的例子就明白了:
周小董
2022/04/13
6.8K0
MySQL时间戳转日期
FROM_UNIXTIME(unix_timestamp,format) 返回表示 Unix 时间标记的一个字符串,根据format字符串格式化。format可以包含与DATE_FORMAT()函数列出的条目同样的修饰符。下列修饰符可以被用在format字符串中: %M 月名字(January……December) %W 星期名字(Sunday……Saturday) %D 有英语前缀的月份的日期(1st, 2nd, 3rd, 等等。) %Y 年, 数字, 4 位 %y 年, 数字, 2 位 %a 缩写的星期名字(Sun……Sat) %d 月份中的天数, 数字(00……31) %e 月份中的天数, 数字(0……31) %m 月, 数字(01……12) %c 月, 数字(1……12) %b 缩写的月份名字(Jan……Dec) %j 一年中的天数(001……366) %H 小时(00……23) %k 小时(0……23) %h 小时(01……12) %I 小时(01……12) %l 小时(1……12) %i 分钟, 数字(00……59) %r 时间,12 小时(hh:mm:ss [AP]M) %T 时间,24 小时(hh:mm:ss) %S 秒(00……59) %s 秒(00……59) %p AM或PM %w 一个星期中的天数(0=Sunday ……6=Saturday ) %U 星期(0……52), 这里星期天是星期的第一天 %u 星期(0……52), 这里星期一是星期的第一天 %% 一个文字“%”。
全栈程序员站长
2022/06/24
5.7K0
MySQL日期和时间函数
WEEK(DATE):返回所给的日期是一年中的第几周 YEAR(DATE):返回所给的日期是哪一年 HOUR(time):返回所给时间的小时 MINUTE(time):返回所给时间的分钟
秋白
2019/02/21
4K0
MySQL日期和时间函数
【mysql】日期与时间类型
YEAR类型用来表示年份,在所有的日期时间类型中所占用的存储空间最小,只需要1个字节的存储空间。
兮动人
2022/03/12
4.2K0
【mysql】日期和时间函数
GET_FORMAT函数中date_type和format_type参数取值如下:
兮动人
2022/03/15
4.8K0
mysql日期时间简单查询
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/106064.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/09
4.8K0
在 MySQL 中处理日期和时间(二)
欢迎回到这个关于在 MySQL 中处理日期和时间的系列。在前面章节中,我们探讨 MySQL 的时态数据类型。第一部分介绍了 DATE、TIME 和 DATETIME 数据类型,而本部分将介绍余下的 TIMESTAMP 和 YEAR 类型。
MySQL技术
2022/06/08
3.4K0
在 MySQL 中处理日期和时间(二)
MySQL日期时间戳转换
1中的now()函数,返回当前时间的长日期,和2018-05-08 08:26:30格式相同
全栈程序员站长
2022/06/24
4.2K0
在 MySQL 中处理日期和时间(三)
在本系列关于日期和时间的前两部分中,我们介绍了 MySQL 的五种时态数据类型。现在是时候将注意力转移到 MySQL 的许多面向日期或时间的函数了。
MySQL技术
2022/06/08
3.8K0
在 MySQL 中处理日期和时间(三)
在 MySQL 中处理日期和时间(四)
在这个关于日期和时间的系列中,我们探索了 MySQL 的五种时态数据类型,以及它的许多面向日期或时间的函数中的一些。在本文中,我们将介绍在 MySQL 中创建日期和时间的几种方法。
MySQL技术
2022/06/08
3.8K0
在 MySQL 中处理日期和时间(四)
mysql日期格式化 yyyymmdd_mysql中时间日期格式化
这里是一个使用日期函数的例子。下面的查询选择了所有记录,其date_col的值是在最后30天以内:
全栈程序员站长
2022/09/02
5.3K0
在 MySQL 中处理日期和时间(一)
绝大多数数据库存储了大量的“时态”数据。时态数据只是表示时间状态的简单数据。一个组织可能出于各种原因收集时态数据,例如分析天气模式和其他环境变量、监控交通状况、研究人口趋势等。企业还经常需要存储有关何时下订单、何时补货、何时雇用员工,以及有关其日常业务的大量其他信息。
MySQL技术
2022/06/08
3.6K0
在 MySQL 中处理日期和时间(一)
在 MySQL 中处理日期和时间(五)
在 MySQL 中的日期和时间系列的最后一部分中,我们将通过编写 SELECT 查询来将迄今为止学到的所有知识付诸实践,以获得对数据的与日期相关的细节。
MySQL技术
2022/06/08
4.2K0
在 MySQL 中处理日期和时间(五)
使用easyui框架中的from表单设置数字默认值和日期默认值
使用easyui框架中的from表单设置数字默认值和日期默认值
Java架构师必看
2021/05/14
4.3K0
使用easyui框架中的from表单设置数字默认值和日期默认值
linux 日期转换时间戳_oracle日期转13位时间戳
4. 指定日期格式转换:date -d @1614592163 +”%Y-%m-%d %H:%M:%S”
全栈程序员站长
2022/11/11
6.3K0
mysql时间戳转为日期格式_mysql时间戳与日期格式的相互转换
Select UNIX_TIMESTAMP(‘2006-11-04 12:23:00’);
全栈程序员站长
2022/06/24
17.6K0

相似问题

mySql日期/日期时间默认值

20

mysql日期与日期时间默认值

22

Mysql日期和日期时间字段的默认值

25

MySQL时间戳/日期默认值

121

MySQL查询日期时间默认值

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文