由于要在Qt上做数据库的相关开发,需要连接MySQL,但是遇到了【driver not load】的错误,查阅相关资料后,解决了错误。以下是我总结的步骤,有需要的朋友们可以参考(避免走弯路):
起初,我是写好代码后,会报错:driver not load,是因为Qt本身缺少一个文件。
1.首先明确自己装的MySQL的版本与Qt版本:
step1.以管理员身份运行:

输入【mysql -V】查看到我的MySQL是64位的:

step2. 确定Qt是32位的:
打开任务管理器,Qt后边括号里写32就代表是32位的。

2. 32位Qt连接64位MySQL
我的MySQL是zip版的,打开安装目录,找到libmysql.dll,然后复制,拷贝到qt安装目录下的bin目录里:

!!!但是,会报错:driver not load,是因为32位的Qt用了64位的libmysql.dll,当然会出错。这时,需要32位的libmysql.dll,因为网上这个真的很难找,需要的可以拿走:https://pan.baidu.com/s/1NJTI5zu5nwnpWN6yUfwl3A
提取码:pbpp
step1.下好这个.dll文件后,拷贝粘贴到qt安装目录下的bin里:

这时,编译运行后,还是会报错:

这是因为:我使用的MySQL是8.0版本的,而我提供的.dll是5.x版本的,8.0版本所使用的验证方式和5.X的不一样,查看验证方式:

我们需要把8.x版本的【caching_sha2_password】改为5.x的验证方式【mysql_native_password】,输入命令:alter user ‘root’@’%’ identified with mysql_native_password by ‘新密码’;如下图:

还需要在MySQL的安装目录下修改my.ini文件:

在文件的[mysqld]下里加上:default_authentication_plugin=mysql_native_password

重新登录,即可。
最后,附上测试代码:
(需要在.pro文件里有这句话:QT += core gui sql)
#include "widget.h"
#include "ui_widget.h"
#include <QtSql/QSqlDatabase>
#include <QDebug>
#include <QMessageBox>
#include <QSqlError>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
//打印Qt支持的数据库驱动
qDebug()<<QSqlDatabase::drivers();
//添加MySQL数据库
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
//连接数据库
db.setHostName("127.0.0.1"); //数据库服务器IP,127.0.0.1表示本机
db.setUserName("root"); //数据库用户名
db.setPassword("你的密码"); //“你的密码”是自己登录mysql的密码
db.setDatabaseName("mysql"); //数据库名字
//打开数据库
if( !db.open())
{
QMessageBox::warning(this, "打开失败",db.lastError().text());
return;
}
else
{
qDebug()<<"连接成功!!!";
return;
}
}
Widget::~Widget()
{
delete ui;
}

本文介绍了在Qt Creator 5.9.4中遇到连接MySQL 8.0.19时【driver not loaded】错误的解决步骤。关键点包括确认MySQL和Qt的位数匹配,提供正确的libmysql.dll文件,以及更改MySQL的验证方式为mysql_native_password。通过这些步骤,成功实现了32位Qt连接64位MySQL数据库。
1538

被折叠的 条评论
为什么被折叠?



