MySQL5.6中TIMESTAMP有那些变化
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MySQL5.6中TIMESTAMP有那些变化,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3119字,纯文字阅读大概需要5分钟。
内容图文
![MySQL5.6中TIMESTAMP有那些变化](/upload/InfoBanner/zyjiaocheng/585/8611e76d5bf54e91ab2bdd4ffcfb499c.jpg)
在MySQL 5.6.6之前,TIMESTAMP的默认行为:
TIMESTAMP列如果没有明确声明NULL属性,默认为NOT NULL。(而其他数据类型,如果没有显示声明为NOT NULL,则允许NULL值。)设置TIMESTAMP的列值为NULL,会自动存储为当前timestamp。
表中的第一个TIMESTAMP列,如果没有声明NULL属性、DEFAULT或者 ON UPDATE,会自动分配 DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP 属性。
表中第二个TIMESTAMP列,如果没有声明为NULL或者DEFAULT子句,默认自动分配'0000-00-00 00:00:00′。插入行时没有指明改列的值,该列默认分配'0000-00-00 00:00:00′,且没有警告。
2列TIMESTAMP未声明为NULL的默认行为
从MySQL5.6.6开始这种默认设置的方法被废弃了。在MySQL启动时会出现以下警告:
[Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (seedocumentation for more details).
关闭警告,在my.cnf中加入
[mysqld] explicit_defaults_for_timestamp=true
重启MySQL后错误消失,这时TIMESTAMP的行为如下:
TIMESTAMP如果没有显示声明NOT NULL,是允许NULL值的,可以直接设置改列为NULL,而没有默认填充行为。
TIMESTAMP不会默认分配DEFAULT CURRENT_TIMESTAMP 和 ON UPDATE CURRENT_TIMESTAMP属性。
MySQL5.6-INNODB-timestampTIMESTAMP 不设置是否为NULL
声明为NOT NULL且没有默认子句的TIMESTAMP列是没有默认值的。往数据表中插入列,又没有给TIMESTAMP列赋值时,如果是严格SQL模式,会抛出一个错误,如果严格SQL模式没有启用,该列会赋值为'0000-00-00 00:00:00′,同时出现一个警告。(这和MySQL处理其他时间类型数据一样,如DATETIME)
TIMESTAMP 默认设置为NOT NULL
Note:
以上内容和存储引擎选择无关。
MySQL从5.5升级到5.6,TIMESTAMP的变化
前言
前段时间,系统MySQL从5.5升级到了5.6,系统出现了大量的异常。大部分异常引起原因是由于TIMESTAMP的行为发生了变化。
TIMESTAMP在MySQL5.5中的行为
第一个未设置默认值的TIMESTAMP NOT NULL字段隐式默认值:
CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 后面未设置默认值的TIMESTAMP NOT NULL字段隐式默认值:
0000-00-00 00:00:00 TIMESTAMP NOT NULL字段插入NULL时,会使用隐式默认值:
CURRENT_TIMESTAMP 不支持多个CURRENT_TIMESTAMP 默认值
TIMESTAMP在MySQL5.6中的行为
支持多个CURRENT_TIMESTAMP 默认值 可以兼容5.5的行为,支持隐性默认值
explicit_defaults_for_timestamp=0 我测试安装的MySQL5.6默认使用这个参数,启动时,服务器会给出一个警告。
[Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use –explicit_defaults_for_timestamp server option (see documentation for more details).
可以去掉隐性默认值
explicit_defaults_for_timestamp=1
总结
MySQL5.5中TIMESTAMP行为是比较诡异的,会造成一些隐含的问题,比如程序中传入了NULL值 MySQL5.6中可以将TIMESTAMP的行为变得正常,但会存在兼容问题 explicit_defaults_for_timestamp参数未来会消失 我们不要过度依赖数据库的特性,这些特性会给应用程序造成掣肘
您可能感兴趣的文章:
- MySQL 5.6 中的 TIMESTAMP 和 explicit_defaults_for_timestamp 参数
- MySQL 5.6 中 TIMESTAMP 的变化分析
- MySQL 5.6 中TIMESTAMP with implicit DEFAULT value is deprecated错误
- Mysql中的Datetime和Timestamp比较
- mysql 数据类型TIMESTAMP
- mysql之TIMESTAMP(时间戳)用法详解
- MySQL错误TIMESTAMP column with CURRENT_TIMESTAMP的解决方法
- 解析mysql中UNIX_TIMESTAMP()函数与php中time()函数的区别
- MySQL timestamp自动更新时间分享
- mysql多个TimeStamp设置的方法解读
- mysql From_unixtime及UNIX_TIMESTAMP及DATE_FORMAT日期函数
- MySQL timestamp的类型与时区实例详解
内容总结
以上是互联网集市为您收集整理的MySQL5.6中TIMESTAMP有那些变化全部内容,希望文章能够帮你解决MySQL5.6中TIMESTAMP有那些变化所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。