总所周知,MySQL日期和时间的类型有多个,与Java中类似,有date、datetime、time、timestamp和year。那么,如何区分各种事件类型?在使用时该选择哪种事件类型?
其中:
-
date有日期部分没有时间部分;
-
time有时间部分没有日期部分;
-
datetime有日期和时间部分;
-
timestamp有日期和时间部分;
-
year只有年份部分。
具体如下:
-
date: "yyyy-MM-dd"格式表示的日期值,"1000-01-01"到"9999-12-31",占3个字节;
-
time: "HH:mm:ss"格式表示的时间值,"-838:59:59"到"838:59:59",占3个字节;
-
datetime: "yyyy-MM-dd HH:mm:ss"格式,"1000-01-01 00:00:00"到"9999-12-31 23:59:59",占8个字节;
-
timestamp: "yyyyMMddHHmmss"格式表示的时间戳,"19700101000000"到"2037年的某个时刻",占4个字节;
-
year: "yyyy"格式的年份,"1901"到"2155",占1个字节;
使用场景
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时,都会用一个update_time字段来表示当前记录的更新时间,用一个字段create_time来表示当前记录的创建时间。由于一条记录只会被创建一次,所以create_time我们一般使用datetime类型。而update_time则使用timestamp类型。
datetime和timestamp还有一个最重要的区别:timestamp带有时区,而datetime没有时区,datetime只是一个固定的时间。
Java日期和时间插入MySQL中
我们在使用Java与MySQL交互时,如果直接把Java日期对象插入到MySQL数据库中,需要注意一些坑,如:
Java中java.sql.Date类型对应MySQL的date类型,java.sql.Time类型对应MySQL的time类型,java.sql.Timestamp类型对应MySQL的timestamp类型。如果Java中的该字段的类型包含了MySQL中该字段的类型,则插入可以成功,否则会报错。
MySQL日期和时间读取到Java
与插入类似,也要注意一些坑,如:
对于MySQL中所有的日期类型,都可以读取到Java对应的日期时间字段上而不会报错,只会把缺少的部分使用历元来填充。
- 我的微信
- 这是我的微信扫一扫
- 我的微信公众号
- 我的微信公众号扫一扫