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

MySQL Connector/C++ 8.0.26 的变化(2021-07-20,全面上市)

弃用和移除说明

  • TLSv1 和 TLSv1.1 连接协议现已弃用,并且在未来的 Connector/C++ 版本中可能会删除对它们的支持。(有关背景信息,请参阅 IETF 备忘录 弃用 TLSv1.0 和 TLSv1.1。)建议使用更安全的 TLSv1.2 和 TLSv1.3 协议建立连接。TLSv1.3 要求服务器和连接器/C++ 都使用 OpenSSL 1.1.1 或更高版本进行编译。

可插拔认证

  • 使用旧版 JDBC API 的应用程序现在可以为使用服务器端身份验证插件的帐户建立连接 authentication_kerberos,前提是正确的 Kerberos 票证可用或可以从 Kerberos 获得。此功能仅在运行 Linux 的客户端主机上可用。

    在这些情况下,无需提供用户名即可连接到 Kerberos 身份验证的帐户:

    • 用户已分配 Kerberos 主体名称,存在该主体名称的 MySQL Kerberos 帐户,并且用户具有所需的票证。

    • 必须 使用连接选项 将默认身份验证方法设置为authentication_kerberos_client 客户端身份验证插件 。OPT_DEFAULT_AUTH

    如果用户在 Kerberos 缓存中有所需的票据(例如,由kinit或类似命令创建),则无需提供密码即可连接。

    如果 Kerberos 缓存中不存在所需的票证并且提供了密码,Connector/C++ 会使用该密码从 Kerberos 获取票证。如果在缓存中找到所需的票证,则忽略任何给定的密码,即使密码不正确,连接也可能成功。

    有关 Kerberos 身份验证的更多信息,请参阅 Kerberos 可插入身份验证

添加或更改的功能

  • 使用遗留 JDBC API 的应用程序现在可以在每个查询的基础上定义查询属性元数据。无需使用变通方法,例如查询字符串中包含特殊格式的注释。此功能是使用类的特定于类型的方法实现的sql::Statement

    int Statement::setQueryAttrInt(attr_name, int_value);
    int Statement::setQueryAttrString(attr_name, str_value);
    int Statement::setQueryAttrBoolean(attr_name, bool_value);

    每个方法都采用一个字符串值属性名称和一个适当类型的属性值。返回值是属性编号,如果服务器不支持查询属性,则返回 0。

    为该类实现了类似的方法, sql::PreparedStatement但什么都不做,因为 MySQL 客户端库尚不支持准备语句的查询属性。

    使用 set-attribute 方法定义的属性适用于发送到服务器执行的下一个 SQL 语句。如果多次定义具有给定名称的属性,则应用最后一个定义。属性在语句执行后被清除,或者可以使用 clearAttributes()方法显式清除。

    mysql_query_attribute_string()函数返回给定属性的当前值,但无法检索具有空名称的属性的值。

    例子:

    std::unique_ptr<sql::Statement> stmt(con->createStatement());
    
    // Set three query attributes for a query without parameters ("SELECT 1"),
    // where the attribute types are int, string, and bool:
    
    stmt->setQueryAttrInt("attr1", 200);
    stmt->setQueryAttrString("attr2", "string value");
    stmt->setQueryAttrBoolean("attr3", true);
    
    // To retrieve the attributes within a query, use the
    // mysql_query_attribute_string() function:
    
    stmt->execute("SELECT 1,
                  mysql_query_attribute_string('attr1'),
                  mysql_query_attribute_string('attr2'),
                  mysql_query_attribute_string('attr3')");
    
    // Change an attribute value:
    
    stmt->setQueryAttrInt("attr1", 100);
    
    // Executing the statement here and fetching the result should show the
    // changed attribute value.
    
    // Clear the attributes:
    
    stmt->clearAttributes();
    
    // Executing the statement here and fetching the result should show the
    // the attributes are no longer present.

    要在 Connector/C++ 应用程序中使用查询属性功能,必须启用对查询属性的服务器端支持。有关说明以及有关一般查询属性支持的更多信息,请参阅 查询属性

修正错误

  • -DMYSQLCLIENT_STATIC_BINDING=0使用和 -DMYSQLCLIENT_STATIC_LINKING=0 配置选项 时构建失败 。(缺陷号 32882344)

  • 对于指定要尝试的服务器列表的连接尝试,连接超时值可能是正确持续时间的两倍。(缺陷号 32781963)

  • 连接器/C++ 为连接失败返回错误 0 而不是非零错误代码。(缺陷号 32695580)

  • sql::Connection:commit()如果连接已断开,则不会抛出任何错误。(缺陷号 23235968)