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

MySQL Connector/J 8.0.24 的变化(2021-04-20,全面上市)

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

添加或更改的功能

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

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

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

    • Connection killed:这是由于连接被另一个客户端会话终止。它会导致 Connector/J 关闭当前会话中的连接,并显示错误消息“Session was killed”。

  • 引入了一个新的连接属性 scrollTolerantForwardOnly,它通过容忍 type 的结果集上的向后和绝对光标移动来保留 Connector/J 8.0.17 及更早版本的遗留行为 ResultSet.TYPE_FORWARD_ONLY。这是为了保持与利用旧行为的遗留代码的兼容性。有关详细信息,请参阅 scrollTolerantForwardOnly 的说明。(缺陷号 31747910)

    参考资料:另请参阅:Bug #30474158。

  • Connector/J 现在支持 JDBC 连接的“无用户”身份验证:当未指定连接用户时,Connector/J 使用运行应用程序的 OS 用户的名称与 MySQL 服务器进行身份验证。有关更多详细信息,请参阅 连接器/J:从中获取连接DriverManager

  • 从此版本开始,只要为连接属性 defaultAuthenticationPlugin显式设置身份验证插件,当 Connector/J 与服务器协商插件时,指定的插件优先于服务器的默认插件。如果没有为该属性显式设置值,则 Connector/J 的行为不会发生变化,在这种情况下,服务器对默认插件的选择优先 mysql_native_password于 Connector/J 的隐式默认值。详见 defaultAuthenticationPlugin 的说明。

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

修正错误

  • X DevAPI: 同时从同一个 X DevAPIClient对象获取和关闭多个会话可能会导致 ConcurrentModificationExceptionConnector/J 在会话结束时抛出异常。(缺陷号 31699993)

  • X DevAPI: 在某些特定条件下,当使用 Deflate 作为压缩 X 协议连接的算法时,Connector/J 抛出一个AssertionFailedException (ASSERTION FAILED: Unknown message type: 57)。这是因为当压缩数据包仅比 Java 使用的某些内部缓冲区的大小时长几个字节 InflaterInputStream时,膨胀过程中剩余的字节将被 Connector/J 丢弃,导致后续数据包的膨胀失败。通过此修复,不会丢弃任何数据字节,并且通货膨胀按预期进行。(缺陷 #31510398,缺陷 #99708)

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

  • 使用 Connector/J 8.0.23 时, ResultSetMetaData.getColumnClassName()未返回与 DATETIME列对应的正确类名。(漏洞 #32405590,漏洞 #102321)

  • 当它是通过查询具有派生值的视图生成时, 创建UpdatableResultSet失败并带有a。NullPointerException(错误#32338451,错误#102131)

  • 当列的值超过 2 32 − 1 时,在for (or )getLong()CHAR_OCTET_LENGTH列上 使用会导致 异常。使用此补丁,在这种情况下会返回2 32 − 1 的值。(缺陷 #32329915,缺陷 #102076)ResultSetDatabaseMetaData.getProcedureColumns()getFunctionColumns()NumberOutOfRange

  • ConnectionPropertiesTransform当用户使用连接属性 propertiesTransform 提供接口的实现时,无法建立与服务器 的连接。这是因为调用了 Connector/J PropertyKey.PORT.getKeyName()而不是 PropertyKey.HOST.getKeyName()获取主机名,并且此修复已更正了这一点。(错误#32151143,错误#101596)

  • 当执行NullPointerException不能用作 a 的语句 ServerPreparedStatement并且连接属性 useUsageAdvisor 设置为时返回trueA。通过此修复,将 SQLException返回 a。(错误#32141210,错误#101558)

  • 在关闭的连接上使用该setSessionMaxRows()方法会导致 NullPointerException. 通过此修复,将 SQLNonTransientConnectionException抛出错误消息“连接关闭后不允许进行任何操作”。(漏洞 #22508715)

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