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

MySQL Connector/C++ 8.0.30 的变化(2022-07-26,全面上市)

字符集支持

  • utf8在 MySQL 8.0.30 中将字符集 重命名为utf8mb3- 连同新utf8mb4的排序规则 - 产生了与排序规则名称相关的错误。为了支持字符集名称更改和新排序规则,现在实施了多项 API 更改。

    对于使用 X DevAPI 或 X DevAPI for C 的应用程序(重大更改):

    • CharacterSet::utf8枚举常量重命名为 ,CharacterSet::utf8mb3但常量值 (21) 没有改变。CharacterSet::utf8 如果代码引用枚举常量 ,则针对新连接器编译现有应用程序会产生错误。

      笔记

      CharacterSet::utf8mb3未使用新排序规则的 代码utf8mb4预计可与旧连接器库一起使用,但前提是它已使用新连接器头文件进行编译。

    • characterSetName() 函数为常量 (21) 的值 返回的名称CharacterSet::utf8/utfmb3从“utf8”更改为“utf8mb3”。

    • 成员 CollationInfo::getName()方法 返回的排序规则名称 已更改。例如, 现在返回“utf8mb3_general_ci”而不是“utf8_general_ci”。 CollationInfoCollation<21>Collation<21>::general_ci.getName()

    • 尽管不是重大更改, 但已添加 所有新CollationInfo成员 (例如 )(例如)。 utf8mb4_bg_0900_ai_ciCollation<CharacterSet::utf8mb4>::bg_0900_ai_ci

    对于使用遗留 JDBC API 的应用程序(重大更改):

    • MySQL_PreparedResultSetMetaData::getColumnCharset() 字符集的和MySQL_ResultSetMetaData::getColumnCharset() 方法 返回的字符集名称 utf8/utf8mb3已从“utf8”更改为“utf8mb3”。

    • MySQL_PreparedResultSetMetaData::getColumnCollation() 的和 MySQL_ResultSetMetaData::getColumnCollation() 方法 返回的排序规则名称 utf8/utf8mb3已更改。例如,以前的排序规则“utf8_general_ci”现在替换为“utf8mb3_general_ci”。

    包含用于检查 utf8字符集名称或其排序规则之一的逻辑的现有应用程序在与新连接器一起使用时可能会出现错误。如果必须使用 8.0.30 之前的连接器编译应用程序,则所有字符集和排序规则比较都应使用 MYSQL_CONCPP_VERSION_NUMBER宏进行保护。有关使用示例,请参阅 连接器/C++ 版本宏

    每个相关的 ABI 都保持向后兼容,这意味着针对旧连接器源构建的应用程序可以正确链接到新连接器库。但是,新库现在报告不同的字符集和排序规则名称 utf8,这种差异可能会破坏代码的逻辑。(缺陷号 34149700)

包装说明

  • 通用 Linux 软件包现在是使用 GNU C 库 2.27 版和新的 C++ ABI ( _GLIBCXX_USE_CXX11_ABI=1) 构建的。有关此更改的更多信息,请参阅 Generic Linux Notes。(缺陷号 33983351)

添加或更改的功能

  • 连接器/C++ 现在 MYSQL_CONCPP_VERSION_NUMBER在公共头文件中提供宏以指示连接器的当前版本。的格式MYSQL_CONCPP_VERSION_NUMBERXYYZZZZ,其中:

    • X是主版本号 (8)

    • YY是次要版本号 (00)

    • ZZZZ是微版本号(0030)

    使用此宏,依赖于特定版本(例如 8.0.32)中引入的一个或多个功能的代码可以在编译源文件的一部分时执行条件测试。例如:

    #if MYSQL_CONCPP_VERSION_NUMBER > 8000032
      // use some 8.0.32+ feature
    #endif

    这种类型的条件编译指令在MYSQL_CONCPP_VERSION_NUMBER宏未定义时也有效(使用 8.0.30 之前的头文件),在这种情况下,它被视为 0。但是,使用宏来检查早于 8.0.30 的版本是不可靠的,应该避免。

    有关其他用法示例,请参阅 连接器/C++ 版本宏

  • 现在可以使用 OpenSSL 3.0 编译连接器/C++。

  • 与 Connector/C++ 捆绑在一起的 Protobuf 源已更新到 Protobuf 3.19.4。为了减少编译时间,此更新仅包含 Connector/C++ 所需的部分。

修正错误

  • 当一个或多个字段为空间数据类型GEOMETRY并且使用准备好的语句执行时,有效查询会发出错误。(漏洞 #19192707)