Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > mysql中时间字段设置

mysql中时间字段设置遇到的问题

作者:azhegps

这篇文章主要介绍了mysql中时间字段设置遇到的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

mysql中时间字段设置问题

案例【一】

今天写数据库脚本,创建数据库时,有一个字段是datetime类型的,想要设置默认时间为当前时间,

于是有了如下代码:

registerDate datetime NOT NULL DEFAULT NOW() COMMENT '注册时间'

执行之后报错

 Error Code: 1067. Invalid default value for 'registerDate'

PS:在mysql 5.6中,这种写法OK,之前的版本不支持这样的写法。

案例【二】

mysql一般在设置时间的时候也常用时间戳。timestamp类型

在执行mysql数据库时报错

CREATE TABLE `advert_schedule_time` (
  `advert_id` int(11) NOT NULL DEFAULT '0' COMMENT '广告id',
  `stime` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '开始时间',
  `etime` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '结束时间',
  `times` int(11) NOT NULL DEFAULT '0' COMMENT '投放次数',
  UNIQUE KEY `adverttime` (`advert_id`,`stime`,`etime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT '广告时间排期表';

首先用下面的命令看下sql_mode

show variables like 'sql_mode';

如果查询的结果如下:

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

如果结果中含有NO_ZERO_IN_DATE, NO_ZERO_DATE

则执行下面的命令:

set session sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

mysql时间类型字段自动更新设置

alter table user modify column update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT ‘更新时间';
alter table 表名 modify column 字段名 类型 NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT ‘注释';

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文