Documentation Home
MySQL 连接器/J 8.0 发行说明  /  MySQL Connector/J 8.0.23 的变化(2021-01-18,全面上市)

MySQL Connector/J 8.0.23 的变化(2021-01-18,全面上市)

版本 8.0.23 是 MySQL Connector/J 8.0 系列的最新通用版本。它适用于 MySQL 服务器版本 8.0 和 5.7。它支持 Java 数据库连接 (JDBC) 4.2 API,并实现了 X DevAPI。

弃用和移除说明

  • 作为 MySQL Terminology Updates的实现,连接属性和公共方法名称已按以下方式进行了调整:

    • 将“master”改为“source”:例如连接属性queriesBeforeRetryMaster变为 queriesBeforeRetrySource,方法 isMasterConnection()变为 isSourceConnection()

    • 将“slave”改为“replica”:比如connection属性allowSlavesDownConnections 变成allowReplicaDownConnections了,methodgetSlaveHosts()变成 了getReplicaHosts()

    • 将“黑名单”更改为“阻止列表”:例如,连接属性 loadBalanceBlacklistTimeout变为 loadBalanceBlocklistTimeout.

    旧名称已被弃用——尽管它们现在仍然可用,但最终将在未来的版本中删除;因此,鼓励用户改用新名称。

    有关任何新属性和方法名称的信息, 请参阅 MySQL Connector/J 8.0 开发人员指南、Connector/J API 文档(由 Javadoc 生成)和Connectors and APIs上提供 的MySQL Connector/JX DevAPI Reference 。

添加或更改的功能

  • 重要更改: 引入了一种新机制,供用户配置当 Connector/J 将时间保存到服务器或从服务器检索时应如何进行时区转换。三个新的连接属性 preserveInstants connectionTimeZoneforceConnectionTimeZoneToSession控制新机制——有关详细信息,请参阅 保留时间点。

    重要的

    要保留 Connector/J 8.0.22 及更早版本的默认行为以从服务器查询会话时区,然后在该时区和 JVM 时区之间转换时间戳,请将新的连接属性 connectionTimeZone设置 为SERVER,并保留其他两个新的属性的默认值(即preserveInstants=trueforceConnectionTimeZoneToSession=false)。拥有 并保持不变但未配置新连接属性的用户可以期待与以前相同的行为,但建议进行测试。 serverTimeZone=user-defined-time-zone

    此外,随着新机制的实施, getObject(columnIndex)DATETIME列的调用现在返回一个 LocalDateTime对象而不是 String. 要收到 String之前的赞,请 getObject(columnIndex, String.class) 改用。

  • java.sql.TIME根据 JDBC 规范,根据 JDBC 规范,实例在设计上不应包含小数秒,因为 它java.sql.TIME是 的包装器java.util.Date,所以可以在 java.sql.TIME实例中存储小数秒。但是,当 Connector/J 将 ajava.sql.TIME作为 MySQLTIME值插入服务器时,小数秒总是被截断。为了允许将小数秒发送到服务器,引入了一个新的连接属性 sendFractionalSecondsForTime:当该属性为 true(默认值)时,小数秒用于java.sql.TIME被发送到服务器;否则,小数秒将被截断。

    此外,连接属性 sendFractionalSeconds 已更改为全局控件,用于为所有日期时间类型发送小数秒。因此,如果 sendFractionalSeconds=false ,则无论sendFractionalSecondsForTime的值如何,都不会发送小数秒 。(缺陷 #20959249,缺陷 #76775)

  • Connector/J 现在支持使用 MySQL Enterprise Server 进行LDAP 可插入身份验证 的以下身份验证方法:

修正错误

  • 使用批处理将java.time.LocalDateTime对象作为值 存储到服务器上失败,投诉无法转换为。通过此修复,铸造再次起作用。(缺陷 #32099505,缺陷 #101413)TIMESTAMPPreparedStatementjava.time.LocalDateTimejava.sql.Timestamp

  • 使用该setObject()方法为 ByteArrayInputStreama 设置实例 会PreparedStatement导致 SQLException. (错误#32046007,错误#101242)

  • 当查询的 SQL 语句中使用时间间隔表达式时,a 的返回值TIMESTAMP不正确 。(缺陷 #31074051,缺陷 #99013)

  • 从Connector/J 5.1 升级到8.0 后,有时保存和检索的结果DATETIMETIMESTAMP值会有所不同。这是因为虽然 Connector/J 5.1 默认不保留时间瞬间,但 Connector/J 8.0.22 和更早版本试图通过在将时间戳值发送到服务器之前将时间戳转换为服务器的会话时区来做到这一点。在此版本中,引入了用于控制时区转换的新机制——有关详细信息,请参阅 保留时间瞬间。在这种新机制下,Connector/J 5.1 在这方面的默认行为通过设置连接属性 preserveInstants=false 得以保留. (错误#30962953、错误#98695、错误#30573281、错误#95644)

  • 使用该 方法 将 MySQLDATETIMETIMESTAMP值转换为 Java 失败,并出现“转换不支持类型 ...”错误。这是因为方法 on和 values 产生了意外的字符串格式。有了这个补丁,现在可以在 、、 、和 数据类型之间进行转换,并且在可能的情况下,时间轴上的即时点会在转换过程中原样保留——有关详细信息,请参阅 保留时间点。(缺陷 #29402209,缺陷 #94457)OffsetDateTimegetObject(i, OffsetDateTime.class)OffsetDateTime.parse()DATETIMETIMESTAMPOffsetDateTimeDATETIMEDATETIMETIMESTAMPYEAR

  • 当 Connector/J 无法理解服务器的会话时区设置(例如,设置为 CEST)时,除非 Connector/J 在连接属性中指定正确的 IANA 时区名称,否则无法与服务器建立serverTimezone 连接。即使实际上不需要在 Connector/J 中使用任何日期时间功能,也会发生这种情况。该问题已由控制日期时间处理的 Connector/J 的新连接属性修复——有关详细信息,请参阅 保留时间瞬间。针对上述情况,现在发生以下情况:

    • 如果新连接属性 connectionTimeZone 设置为LOCAL或指定时区,time_zone则不再检查服务器上的变量

    • 如果 connectionTimeZone=SERVER,变量的检查time_zone会延迟到日期时间驱动程序功能首次被调用,这样一个无法识别的服务器时区就不会阻止连接的建立。但是,当调用日期时间功能并且 time_zoneConnector/J 无法识别 的值时,将抛出异常。

    (缺陷号 21789378)