视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
mysql表设计关于时间字段的注意事项_MySQL
2020-11-09 20:04:28 责编:小采
文档


mysql表设计关于时间字段的注意事项:

几年没有做过mysql的jdbc编码和数据库表设计的工作了,结果刚刚一上手,测试的时候发现都是问题,我这里指的是对应时间字段的设计问题,一般我们都要求时间字段保存到秒,故舍弃了mysql的date类型字段,选择了timestamp类型字段,并且还有一个字段是create_time,默认值是CURRENT_TIMESTAMP 。

字段类型定义:create_time timestamp default CURRENT_TIMESTAMP comment '创建时间,格式为日期',


表结构定义:

/*==============================================================*//* Table: task_detail *//*==============================================================*/create table task_detail( id int not null auto_increment comment '主键', taskName varchar(200) comment '任务名称', start_time timestamp comment '开始时间', end_time timestamp comment '结束时间', task_start_time timestamp comment '任务开始时间', task_end_time timestamp comment '任务结束时间', cost_timesecond int comment '消耗时间,单位为秒', create_time timestamp default CURRENT_TIMESTAMP comment '创建时间,格式为日期', primary key (id));alter table task_detail comment 'Task执行明细表';

结果在进行jdbc保存数据的时候,对于设置为空的字段都进行了默认值的插入。

这块可能没有表述清楚,假设我们需要将end_time设置为空,即通过prepareStatement插入

stmt.setTimestamp(3,null) 这条语句后,其不是空值,而是与

create_time 
一样取了默认值。


这样与我实际想要存储的数据发生了错误,故一直在检查问题原因所在。

MySQl中有多种表示日期和时间的数据类型。其中YEAR表示年份,DATE表示日期,TIME表示时间,DATETIME和TIMESTAMP表示日期和实践。它们的对比如下:

TEAR ,字节数为1,取值范围为“1901——2155”

DATE,字节数为4,取值范围为“1000-01-01——9999-12-31”

TIME,字节数为3,取值范围为“-838:59:59——838:59:59”

DATETIME,字节数为8,取值范围为“1000-01-01 00:00:00——9999-12-31 23:59:59”

TIMESTAMP,字节数为4,取值范围为“19700101080001——20380119111407”

当插入值超出有效取值范围时,系统会报错,并将零值插入到数据库中。

当把数据表结构修改成如下,在存储数据时就一切正常了。

/*==============================================================*//* Table: task_detail *//*==============================================================*/create table task_detail( id int not null auto_increment comment '主键', taskName varchar(200) comment '任务名称', start_time datetime comment '开始时间', end_time datetime comment '结束时间', task_start_time datetime comment '任务开始时间', task_end_time datetime comment '任务结束时间', cost_timesecond int comment '消耗时间,单位为秒', create_time timestamp default CURRENT_TIMESTAMP comment '创建时间,格式为日期', primary key (id));alter table task_detail comment 'Task执行明细表';

主要是因为一张mysql数据表只应该有一个字段是
timestamp 

类型的,且设置了default值。

下载本文
显示全文
专题