Documentation Home
MySQL 连接器/ODBC 发行说明  / MySQL 连接器/ODBC 版本 8.0 中的更改  /  MySQL Connector/C++ 8.0.16 的变化(2019-04-25,正式发布)

MySQL Connector/C++ 8.0.16 的变化(2019-04-25,正式发布)

字符集支持

  • Connector/C++ 支持用于连接到 MySQL 8.0.14 及更高版本服务器的所有 Unicode 字符集,但之前的 Unicode 支持仅限于utf8MySQL 8.0.14 之前服务器的字符集。Connector/C++ 现在支持旧服务器的所有 Unicode 字符集,包括 utf8mb4utf16utf16leutf32ucs2。(缺陷号 28966038)

编译笔记

  • 感谢 Daniël van Eeden,他贡献了代码更改以使用stdbool.h头文件而不是 booltypedef。(缺陷 #29167120,缺陷 #93803)

  • 感谢 Daniël van Eeden,他贡献了代码更改以 在 64 位 FreeBSD 上使用lib而不是使用。lib64(缺陷 #29167098,缺陷 #93801)

  • 以前,对于使用遗留 JDBC API 的连接器/C++ 应用程序,源文件必须使用这组 #include指令:

    #include <jdbc/mysql_driver.h>
    #include <jdbc/mysql_connection.h>
    #include <jdbc/cppconn/*.h>

    现在一个#include指令就足够了:

    #include <mysql/jdbc.h>

配置注意事项

  • 感谢 Daniël van Eeden,all 如果 Connector/C++ 配置了 -DWITH_DOC=ON. (缺陷 #29167107,缺陷 #93802)

  • 以前,对于使用旧版 JDBC 连接器的连接器/C++ 8.0 应用程序,仅支持静态链接到 MySQL 客户端库。和 CMake选项现在可用于允许动态链接MYSQLCLIENT_STATIC_LINKING。 默认情况下, 启用,以使用静态链接到客户端库。禁用此选项以使用动态链接。如果 启用, 也可以使用。如果 启用(默认),Connector/C++ 将链接到共享的 MySQL 客户端库。否则,将在运行时加载和映射共享的 MySQL 客户端库。 MYSQLCLIENT_STATIC_BINDING MYSQLCLIENT_STATIC_LINKINGMYSQLCLIENT_STATIC_LINKINGMYSQLCLIENT_STATIC_BINDINGMYSQLCLIENT_STATIC_BINDING

  • Connector/C++ 8.0 配置现在要求最低 CMake版本为 3.0。

包装说明

  • 连接器/C++ 调试包现在可用于 Linux 和 Windows。这些软件包支持使用Linux上的gdb和 Windows 上的windbg等工具进行符号调试 ,以及从应用程序故障转储中获取有关连接器代码位置的符号信息。使用调试包需要您安装并配置连接器/C++ 源。(错误#29117059、错误#93645、错误#26128420、错误#86415)

  • 为了改进 GitHub 友好性,Community Connector/C++ 源代码分发现在包括一个CONTRIBUTING.md markdown 文件,其中包含旨在对贡献者有所帮助的指南。

  • 连接器/C++ 源代码树中捆绑的 Protobuf 源已更新到 Protobuf 3.6.1。(仅包含 Connector/C++ 所需的部分,以减少编译时间。)

准备好的声明注释

  • 对于 X DevAPI 和 X DevAPI for C,重复执行(两次或更多次)的语句的性能通过在第二次和后续执行中使用服务器端准备语句来提高。这发生在内部;应用程序无需采取任何操作,API 行为应与以前相同。对于更改的语句,会根据需要进行重新准备。提供不同的数据值或不同的 OFFSETorLIMIT子句值不算作更改。相反,新值被传递给先前准备好的语句的新调用。

X DevAPI 注释

  • 对于 X DevAPI 和 X DevAPI for C 应用程序,Connector/C++ 现在支持发送连接属性(应用程序可以在连接时传递给服务器的键值对)的能力。连接器/C++ 定义了一组默认属性,可以禁用或启用。此外,除了默认属性之外,应用程序还可以指定要传递的属性。默认行为是发送默认属性集。

    • 对于 X DevAPI 应用程序,将连接属性指定为connection-attributes连接字符串中的参数,或使用构造函数的 SessionOption::CONNECTION_ATTRIBUTES 选项SessionSettings

      connection-attributes参数值必须为空(与指定相同 )true、一个Boolean值(truefalse启用或禁用默认属性集)或一个列表或零个或多个key=value用逗号分隔的说明符(除了默认属性集外还要发送) . 在列表中,缺少键值的计算结果为空字符串。例子:

      "mysqlx://user@host?connection-attributes"
      "mysqlx://user@host?connection-attributes=true"
      "mysqlx://user@host?connection-attributes=false"
      "mysqlx://user@host?connection-attributes=[attr1=val1,attr2,attr3=]"
      "mysqlx://user@host?connection-attributes=[]"

      SessionOption::CONNECTION_ATTRIBUTES 选项值必须是一个 值Booleantruefalse启用或禁用默认属性集),或一个 DbDocJSON字符串(除了默认属性集外还要发送)。例子:

        Session sess(..., SessionOption::CONNECTION_ATTRIBUTES, false);
        Session sess(..., SessionOption::CONNECTION_ATTRIBUTES, attr_doc );
        Session sess(..., SessionOption::CONNECTION_ATTRIBUTES,
          R"({ "attr1": "val1", "attr2" : "val2" })"
        );

    • 对于 C 应用程序的 X DevAPI,使用 函数的OPT_CONNECTION_ATTRIBUTES() 宏指定连接属性。mysqlx_session_option_set()选项值必须为 null(禁用默认属性集)或JSON字符串(除了默认属性集外还要发送)。例子:

      mysqlx_session_option_set(opts, OPT_CONNECTION_ATTRIBUTES(nullptr));
      mysqlx_session_option_set(opts,
        OPT_CONNECTION_ATTRIBUTES("{ \"attr1\": \"val1\", \"attr2\" : \"val2\" }")
      );

    应用程序定义的属性名称不能以 开头, _因为此类名称是为内部属性保留的。

    如果未以有效方式指定连接属性,则会发生错误并且连接尝试失败。

    有关连接属性的一般信息,请参阅 性能模式连接属性表

用于 C 注释的 X DevAPI

  • 几个用于 C 函数的 X DevAPI 的签名已更改,以便能够通过mysqlx_error_t 句柄将更好的错误信息返回给应用程序。这些功能受到影响:

    mysqlx_client_t*
    mysqlx_get_client_from_url(
      const char *conn_string,
      const char *client_opts,
      mysqlx_error_t **error
    )
     
    mysqlx_client_t*
    mysqlx_get_client_from_options(
      mysqlx_session_options_t *opt,
      mysqlx_error_t **error
    )
    
    mysqlx_session_t*
    mysqlx_get_session(
      const char *host, int port,
      const char *user, const char *password,
      const char *database,
      mysqlx_error_t **error
    )
    
    mysqlx_session_t*
    mysqlx_get_session_from_url(
      const char *conn_string,
      mysqlx_error_t **error
    )
    
    mysqlx_session_t*
    mysqlx_get_session_from_options(
      mysqlx_session_options_t *opt,
      mysqlx_error_t **error
    )
    
    mysqlx_session_t *
    mysqlx_get_session_from_client(
      mysqlx_client_t *cli,
      mysqlx_error_t **error
    )

    每种情况下的最后一个参数都是一个 mysqlx_error_t句柄,Connector/C++ 将错误信息存储到该句柄中。如果参数是空指针,Connector/C++ 将忽略它。应用程序负责通过将非空句柄传递给 来释放它们 mysqlx_free()

    for 的签名mysqlx_free()也已更改为接受void *参数,以便它可以接受任何类型的句柄。mysqlx_free_options()因此,不再需要并弃用 其他类型特定的自由函数,例如 。

    前面的修改更改了连接器/C++ API,这具有以下含义:

    • 修改更改了 ABI,因此 ABI 版本从 1 更改为 2。这会更改连接器库名称。

    • 必须修改针对新 API 编译的 C 应用程序的 X DevAPI 以使用新函数签名。(X DevAPI 应用程序应该在没有更改的情况下构建。)

    • 针对旧 ABI 构建的应用程序将无法使用新连接器库运行。

    • API 更改和 ABI 版本更改不会影响遗留 JDBC 接口,因此遗留 JDBC 连接器库的库名称不会更改,遗留应用程序也无需更改。

    • 可以同时安装旧库和新库。但是,安装程序可能会删除旧库,因此可能需要在安装新库后手动重新添加它们。

添加或更改的功能

  • 感谢 Daniël van Eeden,他为该mysqlx_column_get_collation()函数提供了文档,并对开发人员文档进行了各种更正。(错误#29123114、错误#93665、错误#29115285、错误#93640、错误#29122490、错误#93663)

  • Connector/C++ 现在改进了对连接池中重置会话的支持。将会话返回到池中会删除与会话相关的对象,例如临时表、会话变量和事务,但连接保持打开状态并经过身份验证,因此在重用会话时不需要重新进行身份验证。

修正错误

  • 以前,对于SSL_MODE_VERIFY_IDENTITY 连接选项,Connector/C++ 检查它用于连接的主机名是否与证书中的 Common Name 值匹配,而不是 Subject Alternative Name 值。现在,如果与 OpenSSL 1.0.2 或更高版本一起使用,Connector/C++ 会检查主机名是否与服务器证书中的主题备用名称值或公用名值匹配。(缺陷 #28964313,缺陷 #93301)

  • 反复呼叫后, mysqlx_get_session_from_client()挂断。(漏洞#28587287)

  • SessionSettings/ClientSettings 迭代器实现不完整 。 (漏洞 #28502574)