You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL Connector C++ 8创建Session时触发读取访问违规求助

MySQL Connector C++ 8 创建Session时触发读取访问违规问题排查建议

在Windows 10系统下使用Visual Studio(C++ 14标准)编写C程序,通过MySQL Connector C 8连接本地MySQL 8.0数据库时,无论采用URL方式(mysqlx://root@127.0.0.1)还是参数方式(mysqlx::Session session(host, port, user, password);)创建Session,都会在Utility模块的exchange模板处触发读取访问违规,触发位置代码片段:

_CONSTEXPR20 _Ty exchange(_Ty& _Val, _Other&& _New_val) noexcept(

程序代码如下:

// MySQL test.cpp : This file contains the 'main' function. Program execution begins and ends there.
//

#include <iostream>
#include <string>
#include <mysqlx/xdevapi.h>

int main(int argc, const char* argv[]) {
    try {
        std::string user = "newuser";
        std::string password = "new_user";
        std::string host = "localhost";
        unsigned int port = 3306;
     
        // Create a session to connect to the MySQL Server
        //mysqlx::Session session(host, port, user, password);
        const char* url = (argc > 1 ? argv[1] : "mysqlx://root@127.0.0.1");
        mysqlx::Session session(url);
        // Use the session to execute SQL statements
        mysqlx::Schema schema = session.getSchema("groceries");
        mysqlx::Table table = schema.getTable("foods");

        // Perform any operations on the table or query data as needed

        // Close the session
        session.close();
    }
    catch (const mysqlx::Error& error) {
        std::cerr << "Error: " << error << std::endl;
        return 1;
    }

    return 0;
}

已知条件:

  • MySQL Workbench 8.0 CE和Python程序可正常访问目标数据库
  • 程序编译无错误,仅出现7条C26439(函数需声明为noexcept)警告

排查建议

  • 检查版本兼容性:确认Connector C++ 8版本与你的Visual Studio版本、MySQL 8.0小版本完全匹配。不同编译器生成的二进制文件存在ABI差异,版本不兼容会直接导致内存访问错误。
  • 统一运行时库设置:
    • 查看Connector C++的编译运行时库(/MD多线程DLL或/MT多线程静态库),确保你的项目运行时库设置与之一致。运行时库不匹配会引发内存管理混乱,触发访问违规。
    • 保持项目C标准为C14,与Connector C++的编译标准对齐。
  • 修正连接参数:
    • mysqlx://协议对应MySQL X DevAPI的默认端口是33060,而非传统的3306端口。若MySQL未启用X协议,可尝试将URL改为mysql://root@127.0.0.1:3306使用传统协议,或检查my.ini中的mysqlx_port配置确认X协议端口。
    • 参数方式创建Session时,若使用3306端口,需确认是否为X协议端口,否则会导致连接逻辑异常。
  • 匹配库的调试/发布版本:Debug项目必须链接Connector C++的Debug库,Release项目链接Release库,混用会导致内存布局不一致,引发访问违规。
  • 调试定位内存问题:
    • 在Visual Studio中启用“本机代码调试”,触发异常时查看调用栈,定位具体是哪个内部对象的内存访问出问题。
    • 检查Session创建过程中是否存在未初始化变量或内部资源分配失败的情况。
  • 清理项目重新编译:删除项目的obj、bin等中间文件,重新编译链接,避免旧缓存导致的异常。
  • 切换静态库链接:若当前使用动态库(DLL),尝试改用Connector C++的静态库版本,可能解决动态库加载时的兼容性问题。

内容的提问来源于stack exchange,提问作者James

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 15:55:43