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

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

安全说明

添加或更改的功能

  • 以前,如果在 wait_timeout 系统变量指定的时间内未使用到服务器的连接并且服务器关闭了连接,则客户端不会收到原因通知。通常,客户端会在查询期间看到与 MySQL 服务器的连接丢失 (CR_SERVER_LOST) 或 MySQL 服务器已消失 (CR_SERVER_GONE_ERROR)。

    在这种情况下,服务器现在会在关闭连接之前将原因写入连接,并且客户端会收到一条信息更丰富的错误消息:客户端因不活动而被服务器断开连接。请参阅 wait_timeout 和 interactive_timeout 以配置此行为。(ER_CLIENT_INTERACTION_TIMEOUT)。

    以前的行为仍然适用于客户端与旧服务器的连接以及旧客户端与服务器的连接。

  • 如果经典 MySQL 协议连接遇到服务器超时,Connector/ODBC 现在会报告来自服务器的更准确的断开连接信息。

修正错误

  • 设置 PAD_SPACE=1 不会导致 CHAR 列用空格填充到其全长,这会阻止 MSSQL 链接服务器使用 MySQL 数据库中的 ENUM 和 CHAR 列。(缺陷号 32537000)

  • ODBC SQLProcedureColumns 函数返回不完整的结果,使用后的提取只会返回前 40 个参数。

    解决方法是增加 group_concat_max_len大小,例如 [mysqld] 下的“group-concat-max-len = 1000000”。(漏洞 #32504915,漏洞 #102589)

  • MySQL 8.0.24 添加了一个新的 ER_CLIENT_INTERACTION_TIMEOUT 错误代码,它导致 ODBC 驱动程序在服务器上因 wait_/_interactive 超时终止连接后报告错误的 SQLSTATE HY000 而不是 08S01。ODBC 驱动程序现在链接到 libmysqlclient 8.0.24 以处理这种情况。(缺陷号 32394545)

  • 将不带参数的查询传递给 SQLPrepare() 不会准备任何内容。在某些情况下,它会立即执行这样的查询,这与调用 SQLExecDirect() 函数相同。在其他场景中,它在没有使用 SQLExecute() 函数进行准备的情况下执行。这可能会导致异常长的查询时间。现在,即使查询没有参数,驱动程序也会强制使用 SQLPrepare() 函数准备语句。(缺陷号 32079486)

  • 连接器/ODBC 将 ENUM 列报告为 SQL_CHAR,因为 ODBC 标准不支持 ENUM,并且 MS SQL Server 期望 CHAR 数据始终与列定义中指定的固定长度相同。这修复了与驱动程序的 UNICODE 版本中存在的换行符和制表符相关的错误。解决方法是通过不设置 NO_SSPS=1 来启用 SSPS(默认)。(缺陷 #28783266,缺陷 #92748)

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