记录:Qt5.12+VS2019编译32位MYSQL8.0驱动

第零步,说明

从Qt5.12.4(待验证)版本开始Qt就没带MYSQL的驱动了,需要自己编译。我也是折腾了好久才成功了,特此记录。

第一步,安装MYSQL8.0

我是在官网下载的最新版本的*.msi安装程序,装完才发现数据库是64位,但是connector可以是32位的。此外,编译Qt MYSQL驱动需要C的connector而不是C++的。因为我Qt是32位,所以还需要装x86的C connector。

打开MYSQL installer安装管理程序,点击右侧【add】并添加C的connector组件安装上就行了。

(2020-05-17补充)最近又打开看了下,installer里C的connector不见了,不过也可以直接去网上搜C链接器的下载链接。

可能有些版本没有这个C的驱动,可以自己单独下载装上:https://downloads.mysql.com/archives/c-c/

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

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

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

我先是根据Qt官网的文档使用命令行,结果发现可能我的环境变量没弄好没法用,还是参照百度上的博客用QtCreator来编译。

首先,打开源码MYSQL插件的工程(我的路径E:\Qt\qt-everywhere-src-5.12.4\qtbase\src\plugins\sqldrivers\mysql)。

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

#QMAKE_USE += mysql

INCLUDEPATH +="C:/Program Files (x86)/MySQL/MySQL Connector C 6.1/include"
LIBS +="C:/Program Files (x86)/MySQL/MySQL Connector C 6.1/lib/libmysql.lib"

然后构建。(2020-06-11补充)构建可能会提示 Project ERROR: msvc-version.conf loaded but QMAKE_MSC_VER isn't set。直接去安装目录修改配置文件,我的路径是:E:\Qt\QtOnline\5.15.0\msvc2019\mkspecs\common\msvc-version.conf

在前面加一句QMAKE_MSC_VER = 1919(对应自己的编译器版本):

开始我以为没构建成功,后来发现构建出来的东西莫名其妙跑到顶层目录下了:

我们需要的就是plugins文件夹里的dll。

1.可以手动把dll放到Qt安装包目录的sqldrivers里:

2.(2020-06-11补充)也可以在构建时加上两个 make 步骤,让他自己安装到目录下(debug-install和release-install):

为了调试方便,我把MYSQL目录下的libmysql.dll也放到Qt安装目录的bin文件夹下:

拷贝完这两个就可以开始测试了。

参照博客:https://www.cnblogs.com/szitcast/p/11105899.html

第三步,测试

新建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();
    }
}

第一次运行可能会出错,lastError()显示(QSqlError("2059", "QMYSQL: Unable to connect", "Authentication plugin 'caching_sha2_password' cannot be loaded"))。经查是MYSQL8.0改变了加密规则,MYSQL8.0之前的版本中加密规则是mysql_native_password,而在MYSQL8.0之后,加密规则是caching_sha2_password。

这里我选择把用户登陆密码规则设置为mysql_native_password。

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

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

再次运行我们的测试代码:

大功告成!!!

参考博客:https://msd.misuland.com/pd/3255818100674662202

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

龚建波

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

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

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

打赏作者

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

抵扣说明:

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

余额充值