修复自5.1.22版本以来发现的错误。还为MySQL Server 5.6的几个新特性添加了支持和测试用例。
新的测试用例涵盖了MySQL Server 5.6的新特性:
显式分区选择语法。
交换分区
语法。可移植表空间语法:
锁定表…用于出口
.创建表…DATA DIRECTORY = '/absolute/path/to/ DIRECTORY /'
InnoDB表的语法。新
ALTER TABLE
语法:算法
而且锁
关键词。
增加了密码过期协议的支持。这引入了一个新的布尔连接属性
disconnectOnExpiredPasswords
:如果
disconnectOnExpiredPasswords = true
并且密码已过期,连接将被服务器拒绝ErrorCode == 1820
(ER_MUST_CHANGE_PASSWORD
).如果
disconnectOnExpiredPasswords = false
,连接进入”沙盒”模式,其中除设置密码=…
而且为current_user()设置密码=…
导致抛出错误。设置密码后,用户需要重新连接,因为Connector/J需要来自服务器的其他信息,而这些信息在”沙盒”模式。
更新了静态字符集/排序图,特别是
ucs2_unicode_ci
而且utf8_unicode_ci
排序。Connection.setReadOnly ()
将利用MySQL 5.6及更新版本中对只读事务的服务器端支持。调用.isReadOnly ()
会招致往返如果useLocalSessionState
未启用。驱动程序现在允许缓存MySQL服务器配置值的机制在运行时可替换,通过
serverConfigCacheFactory
财产。默认是一个实现,它是一个每个虚拟机并发映射,以URL为键值。驱动程序将使缓存项无效SQLException异常
抛出指示通信错误的异常(假设服务器已经或正在重新启动)。如果所连接的服务器版本与填充缓存值时的服务器版本不同,则驱动程序还会使缓存项失效。要替换默认实现,请执行
CacheAdapterFactory
类的此实现的完全限定类名> serverConfigCacheFactory
连接选项。
在重新部署应用程序时,用于日志和异常消息中的起源点的堆栈跟踪会导致Permgen泄漏,因为
WebappClassloader
无法进行垃圾收集。我们不再存储整个堆栈跟踪,只存储调用类和方法,并且只在使用使用建议器或分析时存储。(Bug #16097851, Bug #67954)连接设置
useCompression = true
, SQL语句本地加载数据
可能会导致java.net.SocketException
由于管道破裂导致错误。(Bug #15895369, Bug #11237)的
nativeSQL ()
方法将始终截断小数秒,而不是保留输出字符串中的小数部分。现在Connector/J检查服务器版本:它保留MySQL 5.6.4及以上版本的小数部分,并截断旧版本的小数部分。(Bug #14748459, Bug #60598)启用了新的MySQL服务器密码哈希特性后,可以从
结果集
而且CachedRowSet
.测试套件被修改为不执行比较密码()
设置时的结果old_passwords = 2
,因为启用了SHA-256密码哈希,函数返回的结果是不确定的。(错误# 14665141)中的废弃连接的清理线程
NonRegisteringDriver
类被重构为具有静态关机方法。内存被分配但从未释放。类在应用程序中实现上下文侦听器AbandonedConnectionCleanupThread.shutdown ()
打电话给contextDestroyed
方法。在Tomcat应用程序服务器下运行的应用程序中发现了此问题,但它可能也适用于其他应用程序服务器。例如:
@WebListener公共类YourThreadsListener实现ServletContextListener {public void contextDestroyed(ServletContextEvent arg0) {try {AbandonedConnectionCleanupThread.shutdown();} catch (InterruptedException e){}}…}
注意,如果容器不支持注释,则将描述添加到
web . xml
:<侦听器> <侦听器类> user.package。YourThreadsListener < /侦听器类> < /侦听器>
(Bug #14570236, Bug #65909)
使用连接参数
rewriteBatchedStatements = true
,ResultSetRow.getTimeFast
可以给出不正确的值时间
包含小数部分的列。(错误# 14260352)如果一个
时间戳
值通过预处理语句参数传递时,会剥离几分之一秒的精度,即使底层字段(如VARCHAR (255)
)可以储存全部价值。例如,在指定预处理语句参数时,可以将时间戳值转换为字符串prepped_stmt.setString (time_stamp.toString ()
.这在5.1.19中得到了部分修复,但该修复没有覆盖设置的情况useLegacyDatetimeCode = true
.(Bug #11750017, Bug #40279, Bug #60584)executeQuery ()
在Statement.java
让截断表
执行查询,尽管该方法应该阻止修改数据库的任何请求。截断表
而且重命名表
现在过滤了executeQuery ()
.(Bug #11748257, Bug #35653)使用非sun /Oracle JDK时,从源代码编译Connector/J失败,因为Ant目标
compile-testsuite
包含一个AppletRegressionTest
使用特定于sun的类(sun.applet.AppletSecurity
).此修复将删除AppletRegressionTest
因此,构建过程中对Sun类的依赖。(Bug #11745319, Bug #13509)