Heim > Datenbank > MySQL-Tutorial > mysql表设计关于时间字段的注意事项_MySQL

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

WBOY
Freigeben: 2016-05-31 08:46:27
Original
1210 Leute haben es durchsucht

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

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

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


表结构定义:

<pre name="code" class="java">/*==============================================================*//* 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执行明细表';
Nach dem Login kopieren


Nach dem Login kopieren

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

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

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

create_time          
Nach dem Login kopieren
一样取了默认值。


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

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执行明细表';
Nach dem Login kopieren

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

类型的,且设置了default值。






Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage