版本 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
未明确设置,connectTimeout
则xdevapi.connect-timeout
占用connectTimeout
. useOldUTF8Behavior
不再支持 连接属性。connection 属性对 Connector/J 8.0 支持的 MySQL Server 版本没有任何意义,但在与它们一起使用时实际上会破坏数据。(漏洞#28444461)convertToNull
Connector/J 现在将连接属性 的旧值转换zeroDateTimeBehavior
为CONVERT_TO_NULL
. 这允许使用遗留值(例如 NetBeans)的应用程序或框架与 Connector/J 8.0 一起工作。(缺陷 #28246270,缺陷 #91421)-
引入了新的连接属性
sslMode
来替换 现在已弃用的连接属性useSSL
、requireSSL
和 。verifyServerCertificate
此外,当未明确设置时,连接属性xdevapi.ssl-mode
、xdevapi.ssl-truststore
、xdevapi.ssl-truststore-password
和xdevapi.ssl-truststore-type
现在分别采用sslMode
、trustCertificateKeyStoreUrl
、trustCertificateKeyStorePassword
和 的值trustCertificateKeyStoreType
。有关详细信息,请参阅使用 SSL 和 配置属性安全连接 。请注意,对于所有服务器版本,默认设置
sslMode
为PREFERRED
,它等同于 、 和 的旧设置 ,useSSL=true
在 某些情况下与 Connector/J 8.0.12 及更早版本的默认设置不同。应审查继续使用已弃用属性并依赖其旧默认设置的应用程序。(漏洞 #27102307)requireSSL=false
verifyServerCertificate=false
-
UTF-8
连接属性 的值characterEncoding
现在映射到utf8mb4
服务器上的字符集,并且对于 MySQL Server 5.5.2 和更高版本,characterEncoding=UTF-8
现在可以用于将连接字符集设置为utf8mb4
即使character_set_server
已设置为服务器上的其他内容。(在此更改之前,服务器必须character_set_server=utf8mb4
让 Connector/J 使用该字符集。)此外,如果还设置了连接属性
connectionCollation
并且与 的值不兼容characterEncoding
,characterEncoding
则将被对应于 的编码覆盖connectionCollation
。有关详细信息,请参阅使用字符集和 Unicode,包括如何使用
utf8mb3
现在的字符集进行连接。(漏洞 #23227334,漏洞 #81196)
X DevAPI: Connector/J
WrongArgumentException
在遇到十位以上的 JSON 数字时抛出一个。这是由于 JSON 解析器中的一个错误,该错误现已修复。(缺陷 #28594434,缺陷 #92264)X DevAPI: 当连接 URL 中包含的任何连接属性的默认值为 null 时
Session.getUri()
返回一个NullPointerException
当Session.getUri()
返回一个 URL 时,该 URL在其第一个连接属性之前包含一个逗号 ( “,
” )。(漏洞 #23045604)X DevAPI: 处理无效的 JSON 文档时,Connector/J 抛出一个
NullPointerException
. 通过此修复,WrongArgumentException
在这种情况下会抛出 a。(漏洞 #21914769)将连接属性设置为
characterEncoding
映射到 MySQL 字符集的编码latin1
或utf8mb4
不会导致在服务器上使用相应的默认连接排序规则(分别为latin1_swedish_ci
或 )。utf8mb4_0900_ai_ci
通过此修复,在这种情况下使用服务器默认值。(漏洞 #28207422)调用
UpdatableResultSet.updateClob()
导致SQLFeatureNotSupportedException
. 这是因为 Connector/J 中缺少该方法的实现,并且它已通过此修复程序添加。(缺陷号 28207088)当连接属性的值本身包含等号 ( “ = ” ) 时,将引发异常 ( “ WrongArgumentException: Malformed database URL ” )。这是由于连接 URL 的解析器中存在错误,此修复已更正该错误。(缺陷 #28150662,缺陷 #92485)
SQLSyntaxErrorException
当tableName
for 的参数DatabaseMetaDataUsingInfoSchema.getTables()
具有空参数时, Connector/J 抛出一个异常。(缺陷 #28034570,缺陷 #90887)为批处理和 语句 设置
rewriteBatchedStatements=true
并useLocalTransactionState=true
导致事务未提交 。这是由于在服务器上启用多查询支持的中间查询会重置本地事务状态作为副作用。通过此修复,在执行中间查询时会保留本地事务状态。(错误#27658489,错误#89948)UPDATE
DELETE
当语句不包含占位符时,
INSERT
在多查询批处理中 重写准备好的语句失败并出现错误。BatchUpdateException
这是由于查询重写的错误机制所致,此修复程序已更正该机制。(漏洞 #25501750,漏洞 #84813)当使用每个语句有多个查询的批处理准备语句时,查询重写不正确,导致错误的查询被发送到服务器。(缺陷 #23098159,缺陷 #81063)
当更新器或刷新器的子句包含小数时间戳值并且连接属性 sendFractionalSeconds 设置为
PreparedStatement
时, 可滚动和可更新的记录更新失败 。这是因为在这种情况下,Connector/J 没有根据数据库中定义的字段小数部分的长度对子句值中的小数部分进行适当的调整。此修复使 Connector/J 对小数部分进行适当的调整,以便可以将 子句值与从数据库中获取的值进行适当的比较。(漏洞 #22305979)WHERE
false
WHERE
WHERE
测试套件中的一些测试失败了,因为它们无法识别系统时区值,例如
CEST
或WEST
,即使设置了连接属性serverTimezone
。这是因为serverTimezone
测试套件 URL 中的值在被测试套件处理后实际上并未作为连接属性传播到 Connector/J。此修复可确保该属性位于传递给 Connector/J 的实际 URL 中。(漏洞 #21774249)-
当一个 Java
Date
值被绑定到一个PreparedStatement
参数时,试图通过一个 proleptic 格式化该值GregorianCalendar
未能使日期成为 proleptic,因此 Julian-Gregorian 转换(1582 年 10 月 15 日)之前的日期被错误地存储。通过此修复,如果提供给方法,则可以正确使用 proleptic 日历setDate()
。请注意,当尝试使用方法设置或检索 Julian-Gregorian 转换之前的日期时 ,应始终向and 方法显式提供
PreparedSatement
一个 proleptic 。有关详细信息,请参阅 已知问题和限制。(错误#18749544,错误#72609)GregorianCalendar
setDate()
getDate()