Mysql的时间类型

时间类型有time, date, datetime, timestamp
如Mysql官方文档所述:

time 没有date,date没有time,datetime是date和time的集合,
而timestamp也是如此。

MySQL retrieves and displays DATETIME values in ‘YYYY-MM-DD HH:MM:SS’ format. The supported range is ‘1000-01-01 00:00:00’ to ‘9999-12-31 23:59:59’.

Datetime范围大一些。

TIMESTAMP has a range of ‘1970-01-01 00:00:01’ UTC to ‘2038-01-19 03:14:07’ UTC.

范围小一些,所以不推荐使用TIMESTAMP,如果你确定你的代码不能用到2038年。

共同点

A DATETIME or TIMESTAMP value can include a trailing fractional seconds part in up to microseconds (6 digits) precision

后面支持带微秒。

the format for these values is ‘YYYY-MM-DD HH:MM:SS[.fraction]’, the range for DATETIME values is ‘1000-01-01 00:00:00.000000’ to ‘9999-12-31 23:59:59.999999’, and the range for TIMESTAMP values is ‘1970-01-01 00:00:01.000000’ to ‘2038-01-19 03:14:07.999999’.

区别

MySQL converts TIMESTAMP values from the current time zone to UTC for storage, and back from UTC to the current time zone for retrieval. (This does not occur for other types such as DATETIME.)

Mysql会自动把当前时区的时间以UTC时间存储,取出又会自动转成当地时区。而Datetime没有经历这些内容。

mybatis

好奇Mybatis在查询 ResultType=“HashMap”的时候,如何处理DateTime的类型。。

问题:Mybatis如何处理Mysql的Datetime类型

查了一下Mybatis源码:

TypeHandlerRegistry(){
...
this.register((Class)Date.class, (TypeHandler)(new DateTypeHandler()));
this.register((Class)Date.class, JdbcType.DATE, (TypeHandler)(new DateOnlyTypeHandler()));
this.register((Class)Date.class, JdbcType.TIME, (TypeHandler)(new TimeOnlyTypeHandler()));
this.register((JdbcType)JdbcType.TIMESTAMP, (TypeHandler)(new DateTypeHandler()));
this.register((JdbcType)JdbcType.DATE, (TypeHandler)(new DateOnlyTypeHandler()));
this.register((JdbcType)JdbcType.TIME, (TypeHandler)(new TimeOnlyTypeHandler()));
this.register((Class)java.sql.Date.class, (TypeHandler)(new SqlDateTypeHandler()));
this.register((Class)Time.class, (TypeHandler)(new SqlTimeTypeHandler()));
this.register((Class)Timestamp.class, (TypeHandler)(new SqlTimestampTypeHandler()));
...
}

所以说,DateTime应被SqlDateTypeHandler转换成java.util.Date才对。
然而并不是,我的程序返回了HashMap<String,Object>,其中DateTime类型的数据被处理成 java.sql.TimeStamp。

这不科学

于是想了想,Mybatis没必要这么处理,Object,他又不知道Object是什么类型,所以应该调用的是 ResultSet的getObject方法才对,因为这样简单粗暴,最终是要用Object存储的,不必转换。

去查了JDBC官方文档,这是符合事实的。疑惑顿时解开。

MySQL Type Name Return value of GetColumnClassName Returned as Java Class
DATETIME DATETIME java.sql.Timestamp
DATE DATE java.sql.Date
TIMESTAMP[(M)] TIMESTAMP java.sql.Timestamp
TIME TIME java.sql.Time

完。

三级标题怎么是这样。

????

最新文章

  1. Install Atom editor in ubuntu 14.04
  2. java-commons-HttpClient超时设置setConnectionTimeout和setSoTimeout
  3. 关于VR技术和未来发展---转
  4. sql server 使用函数辅助查询
  5. jquery check box
  6. 数组有没有length()这个方法? String有没有length()这个方法?
  7. NeHe OpenGL教程 第四十三课:FreeType库
  8. poj2975--Nim
  9. Java菜鸟学习笔记--数组篇(三):二维数组
  10. 初来乍到--------smarty
  11. BZOJ 4259 残缺的字符串(FFT)
  12. easyui datagrid自定义操作列
  13. asp.net core利用DI实现自定义用户系统,脱离ControllerBase.User
  14. Ajax异步交互基础
  15. 隐藏input光标和输入内容方法
  16. February 25th, 2018 Week 9th Sunday
  17. JS uint8Array转String
  18. 【Codeforces 1106E】 Lunar New Year and Red Envelopes
  19. appium启动sdk的android模拟器
  20. SQL Server 导入excel时“该值违反了该列的完整性约束”错误

热门文章

  1. 使用path监听指定文件系统的变化
  2. .NetCore技术研究-.NET Core迁移前的准备工作
  3. Vue2.0+ElementUI实现表格翻页的实例
  4. jedis指定数据库
  5. [UWP] 解决FlipView图片放大的诡异bug
  6. Vim 使用 DrawIt 画图
  7. WKWebView针对于Cordova的IOS平台性能提升
  8. 怎么给slice加一个Insert方法呢?而不用丑陋的两次append….
  9. 手把手带你体验Stream流
  10. Requests实践详解