MySQL Connector/J 8.0版本说明/ MySQL Connector/J 8.0.24(21-04-20,通用可用性)

MySQL Connector/J 8.0.24(21-04-20,通用可用性)

8.0.24版本是MySQL Connector/J 8.0系列的最新通用可用性版本。它适用于MySQL Server 8.0、5.7和5.6版本。它支持JDBC (Java Database Connectivity) 4.2 API,实现X DevAPI。

增加或更改的功能

  • X DevAPI:对于X协议连接,服务器现在提供了三种新的断开通知:

    • 服务器关闭:这是由于服务器关闭。它导致Connector/J终止连接池中连接到服务器的所有活动和空闲会话,并显示错误消息“server shutdown in progress”。

    • 连接空闲:这是由于连接空闲时间超过了相关超时设置。它导致Connector/J关闭当前连接,并返回错误消息“IO Read error: read_timeout exceeded”。

    • 连接了:这是由于连接被另一个客户端会话杀死。它导致Connector/J关闭当前会话中的连接,并返回错误消息“session was killed”。

  • 一个新的连接属性,scrollTolerantForwardOnly,它保留了Connector/J 8.0.17及更早版本的遗留行为,允许在类型的结果集上向后移动光标和绝对移动光标结果集。TYPE_FORWARD_ONLY.这是为了维护与利用旧行为的遗留代码的兼容性。参见描述scrollTolerantForwardOnly获取详细信息。(错误# 31747910)

    参考文献:参见Bug #30474158。

  • Connector/J现在支持JDBC连接的“无用户”身份验证:当连接的用户未指定时,Connector/J使用运行应用程序的操作系统用户的名称对MySQL服务器进行身份验证。看到Connector/J:从DriverManager了解更多细节。

  • 从这个版本开始,无论何时为连接属性显式设置身份验证插件defaultAuthenticationPlugin,当Connector/J与服务器协商插件时,指定的插件优先于服务器的默认插件。如果没有显式地为属性设置值,则连接器/J不会发生行为更改,在这种情况下,服务器选择的默认插件优先于的隐式默认mysql_native_password连接器/ J。参见defaultAuthenticationPlugin获取详细信息。

  • 过去,对于JDBC连接,当服务器关闭会话时,因为客户端空闲时间超过了服务器所指定的时间wait_timeout系统变量Connector/J返回一个通用的IO错误。连接器/J现在从服务器中继更清晰的错误消息。

错误修复

  • X DevAPI:同时从同一个X DevAPI获取和关闭多个会话客户端对象可能导致并发修改异常在会话结束时由Connector/J抛出。(错误# 31699993)

  • X DevAPI:在某些特定条件下,当使用Deflate作为压缩X协议连接的算法时,Connector/J抛出了一个AssertionFailedException断言失败:未知消息类型:57).这是因为当一个压缩数据包仅仅比Java使用的内部缓冲区的大小长几个字节时InflaterInputStream, Connector/J正在丢弃膨胀过程中的剩余字节,导致后续包的膨胀失败。通过此修复,没有数据字节被丢弃,膨胀按预期工作。(Bug #31510398, Bug #99708)

  • 当一个SecurityManager,则无法建立到MySQL服务器的连接,除非客户端已正确配置为使用基于sasl的LDAP身份验证。这是因为AuthenticationLdapSaslClientPlugin在Connector/J中需要特殊权限才能加载提供程序MySQLScramShaSasl当一个SecurityManager到位;但是,由于在插件初始化过程中,提供程序是由静态初始化器加载的,因此缺乏权限会导致所有连接出现错误,然后失败,即使插件从未被使用或启用过。此修复更改了加载提供程序的方式:加载现在只发生在插件实例初始化时,初始化被推迟到实际需要插件时,因此不使用基于sasl的LDAP身份验证的连接不受插件安全设置的影响。(Bug #32526663, Bug #102188)

  • 当使用Connector/J 8.0.23时,ResultSetMetaData.getColumnClassName ()没有返回对应的正确类名DATETIME列。(Bug #32405590, Bug #102321)

  • 设立UpdatableResultSet操作失败。NullPointerException当它是通过查询带有派生值的视图而生成的。(Bug #32338451, Bug #102131)

  • 使用getLong ()CHAR_OCTET_LENGTH的列结果集DatabaseMetaData.getProcedureColumns ()(或getFunctionColumns ())导致NumberOutOfRange当列的值超过2时异常32−1。对于这个补丁,值为232−此时返回1。(Bug #32329915, Bug #102076)

  • 类的实现时,无法建立到服务器的连接ConnectionPropertiesTransform使用连接属性的接口propertiesTransform.这是因为调用了Connector/JPropertyKey.PORT.getKeyName ()而不是PropertyKey.HOST.getKeyName ()用于获取主机名,并已通过此修复程序更正。(Bug #32151143, Bug #101596)

  • 一个NullPointerException当语句不能用作ServerPreparedStatement和连接属性useUsageAdvisor被设定为真正的.有了这个修复,一个SQLException异常返回。(Bug #32141210, Bug #101558)

  • 使用setSessionMaxRows ()方法上的一个封闭连接导致了NullPointerException.有了这个修复,一个SQLNonTransientConnectionException则抛出错误消息“连接关闭后不允许操作”。(错误# 22508715)

  • 使用setObject ()的目标类型类型。时间导致了SQLException异常当要设置的值有小数部分时,或当值不符合中描述的任何模式时日期和时间文字.这个补丁引入了一个新的逻辑,可以处理小数部分;此外,它还根据字面量的模式执行转换,在需要时,还根据目标数据类型执行转换。(错误# 20391832)