QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7 无法连接到数据库: "Driver not loaded Driver not loaded"
时间: 2025-05-28 09:16:59 浏览: 44
### 问题分析
`QSqlDatabase: QMYSQL driver not loaded` 是 Qt 开发者在尝试连接 MySQL 数据库时常遇到的一个错误。该错误的核心原因是 Qt 的 SQL 插件未能成功加载 `QMYSQL` 驱动程序,这可能由多种因素引起。
以下是可能导致此问题的原因及其解决方案:
---
### 可能原因及解决方案
#### 1. **缺少必要的动态链接库**
如果系统的环境变量 PATH 中未包含 MySQL 安装目录下的 `libmysql.dll` 或其他必要依赖项,则会导致驱动无法加载。
- 确保将 MySQL 安装路径中的 `libmysql.dll` 添加到系统 PATH 环境变量中[^3]。
- 替代方法是手动将 `libmysql.dll` 复制到 Qt 的 bin 目录下(例如:`D:\Qt\5.12.3\mingw73_64\bin`)[^3]。
#### 2. **MySQL 和 Qt 版本不匹配**
不同版本的 MySQL 库可能与特定版本的 Qt 不兼容。如果使用的 `libmysql.dll` 来自较新版本的 MySQL 而 Qt 支持的是旧版库文件,则可能出现加载失败的情况。
- 下载并替换为与当前 Qt 版本兼容的 `libmysql.dll` 文件。可以从 GitHub 上找到经过验证的老版本库文件[^3]。
- 使用 Qt 提供的源码重新构建适用于目标平台的插件也是一个可行的选择[^4]。
#### 3. **SQL 插件未正确编译或部署**
默认情况下,某些 Qt 安装包可能不会自动包含已编译好的 `qsqlmysql.dll` 插件。因此需要自行编译支持 MySQL 的插件。
- 打开 Qt 源码目录中的 mysql.pro 工程文件,并按照官方文档说明完成配置和编译过程[^4]。
```bash
qmake "INCLUDEPATH+=C:/Program Files/MySQL/MySQL Server X.X/include" \
"LIBS+=C:/Program Files/MySQL/MySQL Server X.X/lib/libmysql.lib" mysql.pro
make
```
#### 4. **认证协议冲突**
即使解决了驱动加载问题,在实际建立数据库连接时仍有可能因为服务器端启用了新型加密方式而报错,比如 `Authentication plugin 'caching_sha2_password' cannot be loaded`。
- 修改客户端默认密码算法以适应老式接口;或者更新至最新稳定发行版从而全面支持现代安全机制[^3]。
---
### 示例代码片段
下面展示了一段用于测试 MySQL 连接功能的小型应用程序示例:
```cpp
#include <QCoreApplication>
#include <QSqlDatabase>
#include <QDebug>
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
if (!db.isValid()) {
qDebug() << "Driver is invalid!";
} else {
db.setHostName("localhost"); // 设置主机名
db.setDatabaseName("test_db"); // 设定要访问的数据集名称
db.setUserName("root"); // 用户账号
db.setPassword(""); // 对应密码
bool ok = db.open();
if (ok){
qDebug()<<"Connected successfully.";
}
else{
qDebug()<<db.lastError().text();
}
}
return a.exec();
}
```
注意调整上述设置值来适配个人环境中真实的数据库实例详情。
---
### 总结
综上所述,“QSqlDatabase: QMYSQL driver not loaded”的根本成因主要集中在以下几个方面:缺乏适当版本的支持库、插件本身尚未被创建出来以及潜在的操作系统架构差异等方面。针对这些问题采取相应的措施即可有效消除此类障碍。
---
阅读全文
相关推荐

















