版本 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、 connectionTimeZone和 forceConnectionTimeZoneToSession控制新机制——有关详细信息,请参阅 保留时间点。
重要的要保留 Connector/J 8.0.22 及更早版本的默认行为以从服务器查询会话时区,然后在该时区和 JVM 时区之间转换时间戳,请将新的连接属性 connectionTimeZone设置 为
SERVER
,并保留其他两个新的属性的默认值(即preserveInstants=true 和 forceConnectionTimeZoneToSession=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 可插入身份验证 的以下身份验证方法:
GSSAPI/Kerberos 身份验证方法:引入了一个新的连接属性 ldapServerHostname,用于指定在 Kerberos 密钥分发中心 (KDC) 中配置的 LDAP 服务主机主体。有关详细信息,请参阅 MySQL Connector/J 8.0 开发人员指南中对ldapServerHostname 的 描述。
SCRAM-SHA-256
方法 。
使用批处理将
java.time.LocalDateTime
对象作为值 存储到服务器上失败,投诉无法转换为。通过此修复,铸造再次起作用。(缺陷 #32099505,缺陷 #101413)TIMESTAMP
PreparedStatement
java.time.LocalDateTime
java.sql.Timestamp
使用该
setObject()
方法为ByteArrayInputStream
a 设置实例 会PreparedStatement
导致SQLException
. (错误#32046007,错误#101242)当查询的 SQL 语句中使用时间间隔表达式时,a 的返回值
TIMESTAMP
不正确 。(缺陷 #31074051,缺陷 #99013)从Connector/J 5.1 升级到8.0 后,有时保存和检索的结果
DATETIME
和TIMESTAMP
值会有所不同。这是因为虽然 Connector/J 5.1 默认不保留时间瞬间,但 Connector/J 8.0.22 和更早版本试图通过在将时间戳值发送到服务器之前将时间戳转换为服务器的会话时区来做到这一点。在此版本中,引入了用于控制时区转换的新机制——有关详细信息,请参阅 保留时间瞬间。在这种新机制下,Connector/J 5.1 在这方面的默认行为通过设置连接属性 preserveInstants=false 得以保留. (错误#30962953、错误#98695、错误#30573281、错误#95644)使用该 方法 将 MySQL
DATETIME
或TIMESTAMP
值转换为 Java 失败,并出现“转换不支持类型 ...”错误。这是因为方法 on和 values 产生了意外的字符串格式。有了这个补丁,现在可以在 、、 、和 数据类型之间进行转换,并且在可能的情况下,时间轴上的即时点会在转换过程中原样保留——有关详细信息,请参阅 保留时间点。(缺陷 #29402209,缺陷 #94457)OffsetDateTime
getObject(i, OffsetDateTime.class)
OffsetDateTime.parse()
DATETIME
TIMESTAMP
OffsetDateTime
DATE
TIME
DATETIME
TIMESTAMP
YEAR
-
当 Connector/J 无法理解服务器的会话时区设置(例如,设置为
CEST
)时,除非 Connector/J 在连接属性中指定正确的 IANA 时区名称,否则无法与服务器建立serverTimezone
连接。即使实际上不需要在 Connector/J 中使用任何日期时间功能,也会发生这种情况。该问题已由控制日期时间处理的 Connector/J 的新连接属性修复——有关详细信息,请参阅 保留时间瞬间。针对上述情况,现在发生以下情况:如果新连接属性 connectionTimeZone 设置为
LOCAL
或指定时区,time_zone
则不再检查服务器上的变量如果 connectionTimeZone=SERVER,变量的检查
time_zone
会延迟到日期时间驱动程序功能首次被调用,这样一个无法识别的服务器时区就不会阻止连接的建立。但是,当调用日期时间功能并且time_zone
Connector/J 无法识别 的值时,将抛出异常。
(缺陷号 21789378)