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下载路径。

Qt5.12.3以上+MinGW编译32位MYSQL8.0驱动,解决QSqlDatabase: QMYSQL driver not loaded_第1张图片

Qt5.12.3以上+MinGW编译32位MYSQL8.0驱动,解决QSqlDatabase: QMYSQL driver not loaded_第2张图片

Qt5.12.3以上+MinGW编译32位MYSQL8.0驱动,解决QSqlDatabase: QMYSQL driver not loaded_第3张图片

Qt5.12.3以上+MinGW编译32位MYSQL8.0驱动,解决QSqlDatabase: QMYSQL driver not loaded_第4张图片

Qt5.12.3以上+MinGW编译32位MYSQL8.0驱动,解决QSqlDatabase: QMYSQL driver not loaded_第5张图片

 

之后再安装下载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 '密码';
  3. Qt5.12.3以上+MinGW编译32位MYSQL8.0驱动,解决QSqlDatabase: QMYSQL driver not loaded_第6张图片

 

第二步,使用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位来编译。

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

Qt5.12.3以上+MinGW编译32位MYSQL8.0驱动,解决QSqlDatabase: QMYSQL driver not loaded_第7张图片

 

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

Qt5.12.3以上+MinGW编译32位MYSQL8.0驱动,解决QSqlDatabase: QMYSQL driver not loaded_第8张图片

 

为方便调试,继续将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

#include

#include

#include

 

void test_mysql()

{

    qDebug()<

 

    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()<

            }

        }else{

            qDebug()<

        }

        db.close();

    }else{

        qDebug()<

    }

}

 

恭喜你到这步,已经完成了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

你可能感兴趣的:(QT,creator开发学习笔记,mysql,qt5)