MySQL复习拾遗之一:date、time、datetime

总所周知,MySQL日期和时间的类型有多个,与Java中类似,有date、datetime、time、timestamp和year。那么,如何区分各种事件类型?在使用时该选择哪种事件类型?

其中:

  1. date有日期部分没有时间部分;

  2. time有时间部分没有日期部分;

  3. datetime有日期和时间部分;

  4. timestamp有日期和时间部分;

  5. year只有年份部分。

具体如下:

  1. date: "yyyy-MM-dd"格式表示的日期值,"1000-01-01"到"9999-12-31",占3个字节;

  2. time: "HH:mm:ss"格式表示的时间值,"-838:59:59"到"838:59:59",占3个字节;

  3. datetime: "yyyy-MM-dd HH:mm:ss"格式,"1000-01-01 00:00:00"到"9999-12-31 23:59:59",占8个字节;

  4. timestamp: "yyyyMMddHHmmss"格式表示的时间戳,"19700101000000"到"2037年的某个时刻",占4个字节;

  5. year: "yyyy"格式的年份,"1901"到"2155",占1个字节;

MySQL复习拾遗之一:date、time、datetime

使用场景

date

要使用日期部分,而不关心时间部分时,建议使用date类型。

比如要统计某一天内某文章的点击量,则可以以“日”为单位,应该使用date类型。如“2017-06-26”。

time

要使用日期部分,而不关心日期部分时,建议使用time类型。如“22:59:59”。

datetime

既要使用日期部分又要使用时间部分时,我们可以使用datetime类型。比如,在发表文章时,需要记录文章的发布的时间,则可以使用datetime类型。如“2017-06-26 22:59:59”。

timestamp

既要使用日期部分又要使用时间部分时,我们也可以使用timestamp类型。比如,在发表文章时,需要记录文章的发布的时间,则也可以使用timestamp类型。如“20170626225959”。

year

只关心某一年的数据时,我们可以使用year类型。比如要统计2017年所有的点击量。则可以使用year,如“2017”。

datetime和timestamp

从上面可以看到,datetime和timestamp都拥有日期和事件部分,都可以用来定位到某一秒的时刻。那么什么时候该使用datetime?什么时候该使用timestamp?

我们来看看MySQL官方给出的建议:

MySQL复习拾遗之一:date、time、datetime

这句话的意思是说:

MySQL复习拾遗之一:date、time、datetime

所以,我们一般在使用MySQL时,都会用一个update_time字段来表示当前记录的更新时间,用一个字段create_time来表示当前记录的创建时间。由于一条记录只会被创建一次,所以create_time我们一般使用datetime类型。而update_time则使用timestamp类型。

datetime和timestamp还有一个最重要的区别:timestamp带有时区,而datetime没有时区,datetime只是一个固定的时间。

Java日期和时间插入MySQL中

我们在使用Java与MySQL交互时,如果直接把Java日期对象插入到MySQL数据库中,需要注意一些坑,如:

MySQL复习拾遗之一:date、time、datetime

Java中java.sql.Date类型对应MySQL的date类型,java.sql.Time类型对应MySQL的time类型,java.sql.Timestamp类型对应MySQL的timestamp类型。如果Java中的该字段的类型包含了MySQL中该字段的类型,则插入可以成功,否则会报错。

MySQL日期和时间读取到Java

与插入类似,也要注意一些坑,如:

MySQL复习拾遗之一:date、time、datetime

对于MySQL中所有的日期类型,都可以读取到Java对应的日期时间字段上而不会报错,只会把缺少的部分使用历元来填充。

MySQL复习拾遗之一:date、time、datetime

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin
avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: