【问题标题】:Why does mysql-connector tread YEAR(4) as Date?为什么 mysql-connector 将 YEAR(4) 视为日期?
【发布时间】:2019-05-05 03:21:54
【问题描述】:

https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-reference-configuration-properties.html

yearIsDateType

JDBC 驱动程序是否应该将 MySQL 类型“YEAR”视为 java.sql.Date, 还是作为一个简短的?

默认:真

问题:如果YEAR(4)mysql 中的Integer(默认情况下是这样),为什么mysql-connector java 驱动程序会将年份值作为Date

我的意思是,这个默认配置有什么意义吗?

因为:如果您不仔细查看数据库,您会假设例如2017-01-01 的值直接来自数据库。但是,db 仅将 2017 保存为年份值,而 java 默默地添加了月份的第一天。

【问题讨论】:

  • 一种可能性:默认行为可能最初是驱动程序工作的(唯一)方式。然后,在很明显这可能不是一个好主意之后,他们添加了配置选项来更改行为,但将默认设置保留为旧行为以避免破坏现有代码。
  • 我正在考虑以主要基于意见的方式投票结束,因为我们只能猜测。

标签: java mysql jdbc mysql-connector


【解决方案1】:

文档是这样说的:

YEAR[(2|4)]

YEAR

如果 yearIsDateType 配置属性设置为 false,则 返回的对象类型为java.sql.Short。如果设置为true(默认), 那么返回的对象是 java.sql.Date 类型,日期设置为 1 月 1 日,午夜。

来源:https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-reference-type-conversions.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-03
    • 1970-01-01
    • 2018-05-22
    • 2014-11-26
    • 2018-06-14
    • 2013-03-06
    • 2016-03-14
    • 1970-01-01
    相关资源
    最近更新 更多