记录:Qt5.15+MinGW编译32位MYSQL8.0驱动
第零步,说明
之前写了个VS2019版本的,但是有些友MinGW版本的没弄对,我就再记录下MinGW32版本的的编译。
第⼀步,安装MYSQL8.0
我是在官⽹下载的最新版本的*.msi安装程序,装完才发现数据库是64位,但是connector可以是32位的。此外,编译Qt MYSQL驱动需要C的connector⽽不是C++的。因为我Qt是32位,所以还需要装x86的C connector。
打开MYSQL installer安装管理程序,点击右侧【add】并添加C的connector组件安装上就⾏了。
第⼆步,使⽤QtCreator编译MYSQL驱动插件
我先是根据Qt官⽹的⽂档使⽤命令⾏,结果发现可能我的环境变量没弄好没法⽤,还是参照百度上的博客⽤QtCreator来编译。
⾸先,打开源码MYSQL插件的⼯程(我的路径E:\Qt\qt-everywhere-src-5.15.0\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"
然后构建。开始我以为没构建成功,后来发现构建出来的东西莫名其妙跑到顶层⽬录下了:
我们需要的就是plugins⽂件夹⾥的dll。
1.可以⼿动把dll放到Qt安装包⽬录的sqldrivers⾥:
2.也可以在构建时加上两个 make 步骤,让他⾃⼰安装到⽬录下(debug-install和release-install):
为了调试⽅便,我把MYSQL⽬录下的libmysql.dll也放到Qt安装⽬录的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;
(R"(show global variables like "%datadir%";)")){
()){
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 '密码';
再次运⾏我们的测试代码:mysql下载之后是个文件夹
⼤功告成

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。