mysql 时间问题
mysql 数据库时间类型字段有:date,time,year,datetime,timestamp几种类型。
?
?
字符串类型数据列的字符集属性
在MySQL?4.1以前的版本,字符串数据列的字符集由服务器的字符决定,MySQL?4.1版以后的版本可对每个字符串数据列指定不同的字符串。如果按默认方式设置,可按数据列、数据表、数据库、服务器的顺序关联字符串的字符集,直到找一个明确定义的字符集。
日期,时间型数据列类型
DATE?1000-01-01~9999-12-31?3字节(MySQL3.23版以前是4字节?)?0000-00-00?
TIME?-838:59:59~838:59:59?3字节?00:00:00?
DATETIME?1000-01-01?00:00:00~9999-12-31?23:59:59?8字节?0000-00-00?00:00:00?
TIMESTAMP?19700101000000~2037年的某个时刻?4字节?00000000000000?
YEAR?YEAR(4):1901~2155?YEAR(2):1970~2069?1字节?0000?
MySQL总是把日期和日期里的年份放在最前面,按年月日的顺序显示。
DATE、TIME、DATATIME数据列类型
DATE、TIME和DATATIME类型分别存放日期值、时间值、日期和时间值的组合。它们的格式分别是“CCYY-MM-DD”、“hh:mm:ss”、“CCYY-MM-DD?hh:mm:ss”。
DATATIME里的时间值和TIME值是有区别的,DATATIME里的时间值代表的是几点几分,TIME值代表的是所花费的时间。当向TIME数据列插值时,需用时间的完整写法,如12分30秒要写成“00:12:30”。
TIMESTAMP数据列类型
TIMESTAMP数据列的格式是CCYYMMDDhhmmss,取值范围从19700101000000开始,即1970年1月1号,最大到2037年。它的特点是能把数据行的创建或修改时间记录下来:
如果把一个NULL值插入TIMESTAMP列,这个数据列就将自动取值为当前的日期和时间。
在创建和修改数据行时,如果没有明确对TIMESTAMP数据列进行赋值,则它就会自动取值为当前的日期和时间。如果行中有多个TIMESTAMP列,只有第一个会自动取值。
如果对TIMESTAMP设置一个确定的日期和时间值,则会使TIMESTAMP的自动取值功能失效。
TIMESTAMP默认的列宽是14,可指定列宽,以改变显示效果。但不论你指定的列宽如何,MySQL都是以4字节来存储TIMESTAMP值,也总是以14位精度来计算。
如果需要把创建时间和最近一次修改时间同时记录下来,可以用两个时间戳来记录,一个记录创建时间,一个记录修改时间。不过需记住两件事,一是要把记录修改时间的TIMESTAMP数据列放在最前面,这样才会自动取值;二是创建一条新记录时,要用now()函数来初始化创建时间TIMESTAMP数据列,这样,该TIMESTAMP数据列就不会再变化。
YEAR
YEAR是一种单字节的数据列类型,YEAR(4)的取值范围是1901~2155,YEAR(2)的取值范围是1970~2069,但只显示最后两位数。MySQL能自动把两位数字年份转换成四位数字的年份,如97和14分被转换成1997和2014。转换规则是这样的:
年份值00~69将被转换成2000~2069;
年份值70~99将被转换成1970~1999。
?
00被转换成0000,而不是2000。因为数值00也就是0,而0值是YEAR的一个合法取值
?
java方式获取Mysql的时间很灵活,可以用
?
journalDailyMeeting.setNext_meeting_time(ret.getDate("next_meeting_time"));?journalDailyMeeting.setNext_meeting_time(ret.getTimestamp("next_meeting_time"));?
journalDailyMeeting.setNext_meeting_time(ret.String("next_meeting_time"));?
注意:可以用getString获取时间。
?
oracle必须用getDate
?
mysql 用getDate 展示的是yyyy-MM-dd? 即便是你数据库里面展示的是 datetime? 也不会显示小时分钟和秒。
?
?
