Documentation Home
MySQL 连接器/J 8.0 发行说明  /  MySQL Connector/J 8.0.13 的变化(2018-10-22,全面上市)

MySQL Connector/J 8.0.13 的变化(2018-10-22,全面上市)

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

添加或更改的功能

  • 重要变化: Connector/J 现在需要 Protocol Buffers 3.6.1 作为使用 X DevAPI 和从源代码构建 Connector/J 的外部库。

    有关连接器/J的安装要求,请参阅连接器/J 安装。(漏洞#28499094)

  • X DevAPI: X DevAPI 现在提供连接池功能,可以通过允许重用空闲连接来减少应用程序的开销。连接池由新 Client对象管理,可以从中获取会话。有关详细信息,请参阅 X DevAPI 用户指南中的 使用连接池连接到单个 MySQL 服务器

  • X DevAPI: 一个新的连接属性, xdevapi.connect-timeout现在定义了与服务器建立 X-Protocol 连接的超时时间(以毫秒为单位)。默认值为 10000(10 秒),值为 0 将禁用超时,这会使 Connector/J 等待底层套接字超时。有关详细信息,请参阅 配置属性

    请注意,如果xdevapi.connect-timeout未明确设置,connectTimeoutxdevapi.connect-timeout占用 connectTimeout.

  • useOldUTF8Behavior不再支持 连接属性。connection 属性对 Connector/J 8.0 支持的 MySQL Server 版本没有任何意义,但在与它们一起使用时实际上会破坏数据。(漏洞#28444461)

  • convertToNullConnector/J 现在将连接属性 的旧值转换 zeroDateTimeBehaviorCONVERT_TO_NULL. 这允许使用遗留值(例如 NetBeans)的应用程序或框架与 Connector/J 8.0 一起工作。(缺陷 #28246270,缺陷 #91421)

  • 引入了新的连接属性sslMode来替换 现在已弃用的连接属性useSSLrequireSSL和 。verifyServerCertificate此外,当未明确设置时,连接属性xdevapi.ssl-modexdevapi.ssl-truststorexdevapi.ssl-truststore-passwordxdevapi.ssl-truststore-type现在分别采用sslModetrustCertificateKeyStoreUrltrustCertificateKeyStorePassword和 的值trustCertificateKeyStoreType。有关详细信息,请参阅使用 SSL配置属性安全连接 。

    请注意,对于所有服务器版本,默认设置 sslModePREFERRED,它等同于 、 和 的旧设置 , useSSL=true在 某些情况下与 Connector/J 8.0.12 及更早版本的默认设置不同。应审查继续使用已弃用属性并依赖其旧默认设置的应用程序。(漏洞 #27102307)requireSSL=falseverifyServerCertificate=false

  • UTF-8连接属性 的值characterEncoding现在映射到 utf8mb4服务器上的字符集,并且对于 MySQL Server 5.5.2 和更高版本, characterEncoding=UTF-8现在可以用于将连接字符集设置为utf8mb4 即使 character_set_server 已设置为服务器上的其他内容。(在此更改之前,服务器必须 character_set_server=utf8mb4让 Connector/J 使用该字符集。)

    此外,如果还设置了连接属性 connectionCollation并且与 的值不兼容 characterEncodingcharacterEncoding则将被对应于 的编码覆盖 connectionCollation

    有关详细信息,请参阅使用字符集和 Unicode,包括如何使用utf8mb3 现在的字符集进行连接。(漏洞 #23227334,漏洞 #81196)

修正错误

  • X DevAPI: Connector/JWrongArgumentException 在遇到十位以上的 JSON 数字时抛出一个。这是由于 JSON 解析器中的一个错误,该错误现已修复。(缺陷 #28594434,缺陷 #92264)

  • X DevAPI: 当连接 URL 中包含的任何连接属性的默认值为 null 时Session.getUri()返回一个 NullPointerExceptionSession.getUri() 返回一个 URL 时,该 URL在其第一个连接属性之前包含一个逗号 ( “ ,” )。(漏洞 #23045604)

  • X DevAPI: 处理无效的 JSON 文档时,Connector/J 抛出一个 NullPointerException. 通过此修复, WrongArgumentException在这种情况下会抛出 a。(漏洞 #21914769)

  • 将连接属性设置为 characterEncoding映射到 MySQL 字符集的编码latin1utf8mb4不会导致在服务器上使用相应的默认连接排序规则(分别为latin1_swedish_ci或 )。utf8mb4_0900_ai_ci通过此修复,在这种情况下使用服务器默认值。(漏洞 #28207422)

  • 调用UpdatableResultSet.updateClob() 导致 SQLFeatureNotSupportedException. 这是因为 Connector/J 中缺少该方法的实现,并且它已通过此修复程序添加。(缺陷号 28207088)

  • 当连接属性的值本身包含等号 ( = ) 时,将引发异常 ( WrongArgumentException: Malformed database URL )。这是由于连接 URL 的解析器中存在错误,此修复已更正该错误。(缺陷 #28150662,缺陷 #92485)

  • SQLSyntaxErrorExceptiontableNamefor 的参数DatabaseMetaDataUsingInfoSchema.getTables() 具有空参数时, Connector/J 抛出一个异常。(缺陷 #28034570,缺陷 #90887)

  • 为批处理和 语句 设置rewriteBatchedStatements=trueuseLocalTransactionState=true导致事务未提交 。这是由于在服务器上启用多查询支持的中间查询会重置本地事务状态作为副作用。通过此修复,在执行中间查询时会保留本地事务状态。(错误#27658489,错误#89948)UPDATEDELETE

  • 当语句不包含占位符时,INSERT在多查询批处理中 重写准备好的语句失败并出现错误。BatchUpdateException这是由于查询重写的错误机制所致,此修复程序已更正该机制。(漏洞 #25501750,漏洞 #84813)

  • 当使用每个语句有多个查询的批处理准备语句时,查询重写不正确,导致错误的查询被发送到服务器。(缺陷 #23098159,缺陷 #81063)

  • 当更新器或刷新器的子句包含小数时间戳值并且连接属性 sendFractionalSeconds 设置为PreparedStatement时, 可滚动和可更新的记录更新失败 。这是因为在这种情况下,Connector/J 没有根据数据库中定义的字段小数部分的长度对子句值中的小数部分进行适当的调整。此修复使 Connector/J 对小数部分进行适当的调整,以便可以将 子句值与从数据库中获取的值进行适当的比较。(漏洞 #22305979)WHEREfalseWHEREWHERE

  • 测试套件中的一些测试失败了,因为它们无法识别系统时区值,例如CESTWEST,即使设置了连接属性 serverTimezone。这是因为serverTimezone测试套件 URL 中的值在被测试套件处理后实际上并未作为连接属性传播到 Connector/J。此修复可确保该属性位于传递给 Connector/J 的实际 URL 中。(漏洞 #21774249)

  • 当一个 JavaDate值被绑定到一个 PreparedStatement参数时,试图通过一个 proleptic 格式化该值 GregorianCalendar未能使日期成为 proleptic,因此 Julian-Gregorian 转换(1582 年 10 月 15 日)之前的日期被错误地存储。通过此修复,如果提供给方法,则可以正确使用 proleptic 日历 setDate()

    请注意,当尝试使用方法设置或检索 Julian-Gregorian 转换之前的日期时 ,应始终向and 方法显式提供PreparedSatement一个 proleptic 。有关详细信息,请参阅 已知问题和限制。(错误#18749544,错误#72609)GregorianCalendarsetDate()getDate()