之前写了个VS2019版本的,但是有些群友MinGW版本的没弄对,我就再记录下MinGW32版本的的编译。
我是在官网下载的最新版本的*.msi安装程序,装完才发现数据库是64位,但是connector可以是32位的。此外,编译Qt MYSQL驱动需要C的connector而不是C++的。因为我Qt是32位,所以还需要装x86的C connector。
打开MYSQL installer安装管理程序,点击右侧【add】并添加C的connector组件安装上就行了。
可能有些版本没有这个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
我先是根据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文件夹下:
拷贝完这两个就可以开始测试了。
参照博客:https://www.cnblogs.com/szitcast/p/11105899.html
参照博客:https://www.cnblogs.com/forsee/p/11963832.html
新建Qt工程,pro里加上sql模块:
QT += sql
然后随便加几句测试代码:
#include
#include
#include
#include
void test_mysql()
{
qDebug()<
第一次运行可能会出错,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