Qt5.12.3以上+MinGW编译32位MYSQL8.0驱动,解决QSqlDatabase: QMYSQL driver not loaded

最近更新QT后,发现版本没有内置mysql数据库驱动,qt报错的提示"QSqlDatabase: QMYSQL driver not loaded,QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7".从这里可以清晰的知道目前,qt5.12.3及以上和qt5.13.0及以上,均没有mysql的驱动,mysql的驱动名是QMYSQL.因为没有在有效的驱动里,所以就需要自己编译配置了。参考网上的教程,亲测有效并做个记录。

 

QT版本:Qt5.12.9。(没有mysql驱动的QT版本,一定要安装源代码)

MYSQL官网链接:https://dev.mysql.com/downloads/mysql/

Qt相关文档:https://doc.qt.io/qt-5/sql-driver.html#qmysql

 

第一步、安装MYSQL8.0,以及mysql connector

  在mysql官网下载的最新版本的*.msi安装程序,以及32位的connector。此外,编译Qt MYSQL驱动需要C的connector而不是C++的。因为我Qt是mingw是32位,所以还需要装x86的C connector。

如下图,进入mysql 官网,找到connector下载路径。

 

之后再安装下载mysql8.0,按引导安装就好了。

注意:mysql8.0改变了加密规则,MYSQL8.0之前的版本中加密规则是mysql_native_password,而在MYSQL8.0之后,加密规则是caching_sha2_password。安装过程中注意加密选择,若忘记选也无所谓,安装后

打开MYSQL的命令行工具(MySql 8.0 Command Line Client),执行:

  1. use mysql;
  2. alter user 'root'@'localhost' identified with mysql_native_password by '密码';

 

第二步,使用QtCreator编译MYSQL驱动插件

首先,打开qt安装目录找到,打开源码MYSQL插件的工程(我的路径D:\Qt\Qt5.12.9\5.12.9\Src\qtbase\src\plugins\sqldrivers\mysql)。

然后,修改pro文件,去掉QMAKE_USE这一行,把MYSQL的C库添加进来:

TARGET = qsqlmysql
 
HEADERS += $$PWD/qsql_mysql_p.h
SOURCES += $$PWD/qsql_mysql.cpp $$PWD/main.cpp
 
#QMAKE_USE += mysql
 
OTHER_FILES += mysql.json
 
PLUGIN_CLASS_NAME = QMYSQLDriverPlugin
include(../qsqldriverbase.pri)
 
#该路径是下载解压后的MySQL Connector C 的头文件路径
INCLUDEPATH +="C:\Program Files (x86)\MySQL\MySQL Connector C 6.1\include"
#这是刚才下载解压后的MySQL Connector C 的库文件路径
LIBS +="C:\Program Files (x86)\MySQL\MySQL Connector C 6.1\lib\libmysql.lib"
为了方便查找,不妨增加一条语句,该语句用来指明编译后的结果输出的位置

DESTDIR  = ../mysql/lib/

 

然后开始构建,记得要用mingw 32位来编译。

在指定的输出路径下,会得到下面四个文件。

 

将它们放在Qt安装包目录的sqldrivers里。(我的路径:D:\Qt\Qt5.12.9\5.12.9\mingw73_32\plugins\sqldrivers)

 

为方便调试,继续将MySQL Connector C中的libmysql.dll放在QT安装包目录的bin里。

我的libmysql.dll路径:C:\Program Files (x86)\MySQL\MySQL Connector C 6.1\lib。

我的bin路径:D:\Qt\Qt5.12.9\5.12.9\mingw73_32\bin。

 

第三步,测试

新建Qt工程,pro里加上sql模块:

 

QT += sql

然后随便加几句测试代码:

 

#include <QSqlDatabase>

#include <QSqlQuery>

#include <QSqlError>

#include <QDebug>

 

void test_mysql()

{

    qDebug()<<QSqlDatabase::drivers();

 

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

    db.setHostName("localhost");

    db.setPort(3306);

    db.setUserName("root");

    db.setPassword("qq654344883");

    db.setDatabaseName("mysql_db");

    if(db.open()){

        QSqlQuery query;

        if(query.exec(R"(show global variables like "%datadir%";)")){

            if(query.next()){

                qDebug()<<query.value(0).toString()<<query.value(1).toString();

            }

        }else{

            qDebug()<<query.lastError();

        }

        db.close();

    }else{

        qDebug()<<db.lastError();

    }

}

 

恭喜你到这步,已经完成了mysql的驱动.你可以正常使用mysql数据库和mariadb数据库了.

切记:不同版本的qt,一定要重新编译mysql.pro项目得到不同的mysql.dll驱动,因为mysql驱动不通用针对不同的qt版本

 

参照博客:https://blog.csdn.net/gongjianbo1992/article/details/106697112

参照博客:https://blog.csdn.net/gongjianbo1992/article/details/106697112

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

靓仔佳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值