Documentation Home
MySQL 连接器/ODBC 发行说明  / MySQL 连接器/ODBC 版本 8.0 中的更改  /  MySQL Connector/C++ 8.0.5 的变化(2017-07-10,发展里程碑)

MySQL Connector/C++ 8.0.5 的变化(2017-07-10,发展里程碑)

MySQL 连接器和其他 MySQL 客户端工具和应用程序现在将其版本号的第一位数字与其支持的(最高)MySQL 服务器版本同步。例如,MySQL Connector/C++ 8.0.12 旨在支持 MySQL 服务器版本 8(或更低版本)的所有功能。此更改使得决定将哪个客户端版本用于哪个服务器版本变得简单直观。

Connector/C++ 8.0.5 是第一个使用新编号的版本。它是 Connector/C++ 2.0.4 的后续版本。

字符集支持

  • Connector/C++ 现在支持配置为 utf8mb4用作默认字符集的 MySQL 服务器。

    目前,Connector/C++ 仅适用于 UTF-8 和 ASCII 默认字符集(utf8utf8mb4ascii)。如果用户创建一个表,其中包含使用非 UTF-8 字符集的文本列,并且此列包含包含非 ASCII 字符的字符串,则尝试访问该字符串(例如,在查询结果中)时会发生错误. 另一方面,如果字符串仅由 ASCII 字符组成,则无论字符集如何,都会获得正确的结果。此外,对于任何字符集,始终可以获得列值的原始字节。

弃用和移除说明

  • 该类NodeSession已重命名为 Session,并且XSession 该类已被删除。

X DevAPI 注释

  • 对于 X DevAPI 或 X DevAPI for C 应用程序,在创建新会话时,可以尝试多个主机,直到建立成功连接。主机列表可以在连接字符串或会话创建选项中给出,有或没有优先级。

    X DevAPI 示例:

    Session sess(
      "mysqlx://user:password@["
        "server.example.com,"
        "192.0.2.11:33060,"
        "[2001:db8:85a3:8d3:1319:8a2e:370:7348]:1"
      "]/database"
    );
    
    Session sess({ SessionSettings::USER, "user",
                   SessionSettings::PWD, "password,
                   SessionSettings::HOST, "server.example.com",
                   SessionSettings::HOST, "192.0.2.11",
                   SessionSettings::PORT, 33060,
                   SessionSettings::HOST, "[2001:db8:85a3:8d3:1319:8a2e:370:7348]",
                   SessionSettings::PORT, 1,
                   SessionSettings::DB, "database" });

    用于 C 示例的 X DevAPI:

    sess = mysqlx_get_session_from_url(
            "mysqlx://user:password@["
               "(address=127.0.0.1,priority=2),"
               "(address=example.com:1300,priority=100)"
            "]/database",
            err_msg, &err_code);
    
    mysqlx_opt_type_t *sess_opt = mysqlx_session_option_new();
    mysqlx_session_option_set(sess_opt,
      MYSQLX_OPT_USER, "user",
      MYSQLX_OPT_PWD, "password",
      MYSQLX_OPT_HOST, "127.0.0.1",
      MYSQLX_OPT_PRIORITY, 2,
      MYSQLX_OPT_HOST, "example.com",
      MYSQLX_OPT_PORT, 1300,
      MYSQLX_OPT_PRIORITY, 100,
      MYSQLX_OPT_DB, "database");
    
    mysqlx_session_t *sess = mysqlx_get_session_from_options(
      sess_opt, err_buf, &err_code
    );

添加或更改的功能

  • 该类SqlResult现在实现了 getAffectedRowsCount()getAutoIncrementValue()X DevAPI 方法。(缺陷号 25643081)

  • 为避免无意中更改集合中的所有项目, Collection::modify()Collection::remove()方法现在需要一个非空选择表达式作为参数。

  • 使用Session对象创建的连接现在默认加密。此外, ssl-enabled连接选项已被替换为ssl-mode. 允许 的ssl-mode值为 disabled, required(默认值)verify_caverify_identity

  • 连接字符串中的选项名称现在被视为不区分大小写。默认情况下,选项值仍然区分大小写。

修正错误

  • 现在可以stmt.execute() 多次调用。修改语句参数的调用方法应该修改用 发送的语句 execute()。这也适用于将新值绑定到命名参数。(漏洞 #25858159)

  • SessionSettings由于构造函数解析不明确,在 创建对象时发生编译器错误 。(漏洞 #25603191)

  • collection.add()如果使用两个 STL 容器参数调用,则编译失败。(缺陷号 25510080)

  • 现在支持这些表达式语法:

    CHARSET(CHAR(X'65'))
    'abc' NOT LIKE 'ABC1'
    'a' RLIKE '^[a-d]'
    'a' REGEXP '^[a-d]'
    POSITION('bar' IN 'foobarbar')

    不支持这些表达式语法,但在使用它们时会提供更好的错误消息:

    CHARSET(CHAR(X'65' USING utf8))
    TRIM(BOTH 'x' FROM 'xxxbarxxx')
    TRIM(LEADING 'x' FROM 'xxxbarxxx')
    TRIM(TRAILING 'xyz' FROM 'barxxyz')
    'Heoko' SOUNDS LIKE 'h1aso'

    (漏洞 #25505482)