qt 5.9.9连接mysql 8.0踩过的坑

在尝试使用Qt5.9.9连接MySQL8.0时遇到SSL连接错误,经过排查发现是版本不兼容问题。解决方案是降级至MySQL5.7,最终成功建立连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

qt 5.9.9连接mysql 8.0踩过的坑

最近需要qt连接mysql,于是去试了试。
博主看了很多博客,这是我的代码

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");

    db.setHostName("127.0.0.1");
    db.setDatabaseName("student");// 数据库名
    db.setUserName("root");// 用户名
    db.setPassword("123456");// 密码
    db.setPort(3306);// 端口号
    db.open();

    QSqlQuery query;
    query.exec("create table login(id varchar(30),password varchar(30));");

}

Widget::~Widget()
{
    delete ui;
}

此处要注意在.pro文件中改一下

QT       += core gui sql

运行结果为:
在这里插入图片描述
于是我将mysql/lib下的libmysql.dll和libmysql.lib文件拷贝到YOUR_QT_PATH/bin下。

结果错误没有变。于是,我改了一行代码看看错误原因

 qDebug() << "database connect is fail" << db.lastError().text();

错误代码为"SSL connection error: unknown error number QMYSQL: Unable to connect"
博主在网上搜了一下,发现是因为mysql 8.0和qt 5.9.9版本不匹配。必须是mysql 5.7。所以,只能把mysql 8.0卸掉,重新装mysql 5.7.
最后,我的qt终于连接上mysql了。
在这里插入图片描述

感动到哭~
最后,如果各位看官觉得有用,烦请点赞收藏,你的关注是我更新最大的动力

<think>好的,我现在需要帮用户解决QSqlError 2026导致的SSL连接问题。用户提到错误信息是“SSL connection error: unknown error number”,这通常和数据库连接的SSL配置或驱动版本有关。 首先,根据用户提供的引用[1]和[2],问题可能出在驱动版本不兼容。比如,使用旧版驱动连接MySQL 8.0,而MySQL 8.0默认要求SSL连接。这时候可能需要更新驱动或者调整SSL设置。 接下来,我应该考虑用户的具体环境。用户用的是32位的Qt5.9.0连接64位的MySQL8.0,这和引用[2]中的情况类似。可能需要检查QtMySQL插件是否正确,是否使用了兼容的libmysql.dll。 可能的解决方案包括:禁用SSL选项,更新MySQL驱动,或者确保Qt的插件与MySQL版本匹配。比如,在连接字符串中添加“MYSQL_OPT_SSL_MODE=SSL_MODE_DISABLED”来禁用SSL。另外,用户可能需要替换Qt的插件为支持MySQL8.0版本,或者使用更高版本Qt,因为旧版本可能不支持新的身份验证方式。 还要考虑MySQL用户权限问题,比如是否允许非SSL连接,或者是否需要更新用户的认证插件为mysql_native_password。因为MySQL8.0默认使用caching_sha2_password,旧驱动可能不支持。 需要分步骤指导用户检查驱动文件、修改连接参数、调整MySQL配置,以及可能的重新编译Qt插件。同时,确保用户理解每个步骤的作用,比如禁用SSL可能带来的安全风险,建议仅在测试环境中使用。 最后,生成相关问题,帮助用户深入理解问题原因和扩展解决方案,比如SSL的作用、其他连接错误处理等。</think>针对Qt程序连接MySQL时出现的QMYSQL错误2026(SSL连接问题),以下是分步解决方案: ### 解决方案步骤 1. **禁用SSL连接(临时方案)** 在数据库连接字符串中添加SSL禁用参数: ```cpp QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); db.setHostName("localhost"); db.setDatabaseName("test"); db.setUserName("root"); db.setPassword("123456"); db.setConnectOptions("MYSQL_OPT_SSL_MODE=SSL_MODE_DISABLED"); // 关键参数 ``` 此方法会牺牲连接安全性,建议仅用于测试环境[^2] 2. **更新MySQL驱动文件** - 下载与MySQL8.0兼容的32位libmysql.dll - 替换Qt安装目录下的驱动文件: ``` Qt\5.9\mingw53_32\plugins\sqldrivers\qsqlmysql.dll ``` 同时将新的libmysql.dll放入Qt的bin目录和系统PATH路径[^2] 3. **修改MySQL用户认证方式** 在MySQL命令行执行: ```sql ALTER USER &#39;用户名&#39;@&#39;localhost&#39; IDENTIFIED WITH mysql_native_password BY &#39;密码&#39;; FLUSH PRIVILEGES; ``` MySQL8.0默认使用caching_sha2_password认证插件,旧驱动可能不支持[^1] 4. **检查Qt插件编译配置** 重新编译QMYSQL插件时需指定: ```bash --mysql_config "C:/Program Files/MySQL/MySQL Server 8.0/bin/mysql_config" ``` 确保使用与MySQL8.0匹配的include/lib文件 5. **升级Qt版本(终极方案)** Qt5.12+已原生支持MySQL8.0的新认证方式,建议升级到: ```bash Qt5.15 LTS + MySQL Connector/C 8.0 ``` ### 验证配置有效性 可通过以下命令测试SSL状态: ```sql SHOW VARIABLES LIKE &#39;%ssl%&#39;; STATUS ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值