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

MySQL Connector/C++ 8.0.22 的变化(2020-10-19,全面上市)

编译笔记

  • 现在可以在 Windows 上使用 MinGW 编译连接器/C++。感谢 Eric Beuque 的贡献。请注意,这可以在 MinGW 上进行构建,但不会使 MinGW 成为 Connector/C++ 的官方支持平台。(错误#31636723,错误#100248)

连接管理说明

  • 对于使用 X 插件建立的连接,Connector/C++ 现在可以指定用于使用压缩的连接的压缩算法。连接 URI 和 SessionSettings对象允许明确指定首选算法:

    • URI 字符串允许一个 compression-algorithms选项。该值是一个算法名称,或者是一个或多个指定为数组的逗号分隔算法的列表。例子:

      mysqlx://user:password@host:port/db?compression-algorithms=lz4
      mysqlx://user:password@host:port/db?compression-algorithms=[lz4,zstd_stream]
    • SessionSettings对象允许一个 SessionOption::COMPRESSION_ALGORITHMS 选项。该值是一个或多个以逗号分隔的算法的列表。例子:

      mysqlx::Session sess(SessionOption::USER, "user_name",
                           SessionOption::PWD, "password",
                           SessionOption::COMPRESSION_ALGORITHMS, "lz4");
      mysqlx::Session sess(SessionOption::USER, "user_name",
                           SessionOption::PWD, "password",
                           SessionOption::COMPRESSION_ALGORITHMS, "lz4,zstd_stream");

      或者,算法值可以作为容器给出:

      std::list<std::string> algorithms = {"lz4","zstd_stream"};
      mysqlx::Session sess(SessionOption::USER, "user_name",
                           SessionOption::PWD, "password",
                           SessionOption::COMPRESSION_ALGORITHMS, algorithms);
    • 对于 C 的 X DevAPI,有一个新 MYSQLX_OPT_COMPRESSION_ALGORITHMS选项和相应 的OPT_COMPRESSION_ALGORITHMS辅助宏。

      URI 方式遵循 X DevAPI URI 方式:

      mysqlx_session_t *sess = mysqlx_get_session_from_url(
        "mysqlx://user:password@host:port/db?compression-algorithms=[lz4,zstd_stream]",
         &error);

      选项模式遵循用于以下内容的字符串格式 SessionOption

      mysqlx_session_option_set(opt,
                OPT_HOST("host_name"), 
                OPT_USER("user"),
                OPT_PWD("password"),
                OPT_COMPRESSION_ALGORITHMS("lz4,zstd_stream"),
                PARAM_END));

    这些规则适用:

    • 允许的算法名称是 zstd_streamlz4_messagedeflate_stream,以及它们的别名 zstdlz4deflate。名称不区分大小写。未知名称将被忽略。

    • 压缩算法选项允许多种算法,应按优先顺序列出。指定多个算法的选项可以混合使用完整的算法名称和别名。

    • 如果未指定压缩算法选项,则默认为 zstd_stream,lz4_message,deflate_stream.

    • 实际使用的算法是在服务器端也允许的压缩算法选项中列出的第一个算法。但是,压缩算法的选项取决于压缩模式:

      • 如果压缩模式为disabled,压缩算法选项将被忽略。

      • 如果压缩模式是preferred 但服务器端不允许列出的算法,则连接未压缩。

      • 如果压缩模式是required 但服务器端没有允许列出的算法,则会发生错误。

    另请参阅使用 X 插件进行连接压缩

遗留 (JDBC API) 注释

  • 对于使用遗留 JDBC API(即,不是 X DevAPI 或 X DevAPI for C)的应用程序,Connector/C++ 二进制分发现在包括提供客户端 LDAP 身份验证插件的库,以及插件。这使 Connector/C++ 应用程序可以使用简单的 LDAP 身份验证或使用身份验证方法的 SASL LDAP 身份验证连接到 MySQL 服务器 SCRAM-SHA-1

    笔记

    LDAP 身份验证需要使用来自 MySQL Enterprise Edition 发行版的服务器。有关 LDAP 身份验证插件的更多信息,请参阅 LDAP 可插入身份验证

    如果 Connector/C++ 是从压缩的tar 文件或 Zip 存档安装的,应用程序将需要将OPT_PLUGIN_DIR连接选项设置为适当的目录,以便可以找到捆绑的插件库。(或者,将所需的插件库复制到客户端库期望的默认目录。)

    例子:

    sql::ConnectOptionsMap connection_properties;
    
    // To use simple LDAP authentication ...
    
    connection_properties["userName"] = "simple_ldap_user_name";
    connection_properties["password"] = "simple_ldap_password";
    connection_properties[OPT_ENABLE_CLEARTEXT_PLUGIN]=true;
    
    // To use SASL LDAP authentication using SCRAM-SHA-1 ...
    
    connection_properties["userName"] = "sasl_ldap_user_name";
    connection_properties["password"] = "sasl_ldap_scram_password";
    
    // Needed if Connector/C++ was installed from tar file or Zip archive ...
    
    connection_properties[OPT_PLUGIN_DIR] = "${INSTALL_DIR}/lib{64}/plugin";
    
    auto *driver = get_driver_instance();
    auto *con = driver->connect(connection_properties);
    
    // Execute statements ...
    
    con->close();
  • 对于使用遗留 JDBC API(即不是 X DevAPI 或 X DevAPI for C)的应用程序, 以前只能通过为客户端可访问的所有文件启用它来在客户端控制语句LOCAL的数据加载功能,或者通过LOAD DATA完全禁用它。新 OPT_LOAD_DATA_LOCAL_DIR选项允许将LOCAL数据加载限制到位于指定目录中的文件。例如,要在连接时设置值:

    sql::ConnectOptionsMap opt;
    opt[OPT_HOSTNAME] = "localhost";
    opt[OPT_LOAD_DATA_LOCAL_DIR] = "/tmp";
    
    sql::Connection *conn = driver->connect(opt);

    OPT_LOAD_DATA_LOCAL_DIR也可以在连接时间后设置:

    sql::ConnectOptionsMap opt;
    opt[OPT_HOSTNAME] = "localhost";
    
    sql::Connection *conn = driver->connect(opt);
    
    //.... some queries / inserts / updates
    
    std::string path= "/tmp";
    conn->setClientOption(OPT_LOAD_DATA_LOCAL_DIR, path);
    
    // LOAD LOCAL DATA DIR
    ...
    
    //Disable LOCAL INFILE by setting to null
    conn->setClientOption(OPT_LOAD_DATA_LOCAL_DIR, nullptr);

    OPT_LOAD_DATA_LOCAL_DIR选项映射到C API 函数的MYSQL_OPT_LOAD_DATA_LOCAL_DIR选项。mysql_options()有关详细信息,请参阅 LOAD DATA LOCAL 的安全注意事项

修正错误

  • \xEF以字节顺序标记 开头的 utf-8 字符串解码失败 。(错误#31656092,错误#100292)

  • 启用该CLIENT_MULTI_FLAG选项后,批量执行多个语句会导致下一个查询失败并出现“命令不同步” 错误。(缺陷号 31399362)

  • 对于使用 X 插件建立的连接,通过 Unix 套接字文件的连接不起作用。(缺陷号 31329938)

  • 对于使用 X 插件建立的连接,默认的压缩模式DISABLEDPREFERRED. (缺陷号 31173447)