背景:使用QT连接MySql数据库失败,提示“QMYSQL driver not loaded”
项目环境:QT6.2.4 + MinGW 11.2.0 64-bit + MySql8.0.19
一、连接失败原因
QT6已经不包含已编译好的qsqlmysql.dll动态库,所以软件提示“QMYSQL driver not loaded”,我的QT中能使用的驱动:QSQLITE、QODBC、QPSQL
首先不是QT增加使用门槛、风向变了,而是自从Oracle 收购MySql后对其进行了商业化,如今的MySql已经不能算是一个完全开源的数据库了,而Qt官方则一直严格秉持着开源理念,故 Qt6 取消了对 MySql数据库的默认支持 。
本项目使用mingw进行编译,进入如上图路径后,即可查看现在已存在的driver。
QT6手动编译qsqlmysql.dll具体步骤如下:
二、下载QT源码
下载好之后的mysql驱动源码在对应版本的此路径中,有些人会有mysql.pro文件,我只有CMakeLists.txt文件,本文仅讲述只有CMakeLists.txt文件的情况。
三、编译qsqlmysql.dll文件
1.复制QT6.2.4-->6.2.4-->Src文件夹中的qtbase文件夹,将其放置在一个空文件夹(请忽略此文件夹中的其他文件夹)
2.在QT Creator中打开项目文件,项目文件位置:qtbase-->src-->plugins-->sqldrivers-->CMakeLists.txt
3.我安装了mysql8.0.19。将mysql安装目录下的include、lib文件夹放置在一个空文件夹中,我随便放的,于是将其和前面的qtbase文件夹放到了一起
4.进入到QT项目中,找到.cmake.conf文件,加入以下三句话。
SET(FEATURE_sql_mysql ON)
SET(MySQL_INCLUDE_DIR "刚才复制的include文件夹路径/include")
SET(MySQL_LIBRARY "刚才复制的lib文件夹/lib/libmysql.lib")
我的路径仅供参考,请换成自己的路径
5.按键Ctrl + S保存后,进行项目构建
qsqlmysql.dll文件已经编译好了,点击QT Creator左边的“项目”一栏,我前面使用的Release构建模式,所以现在查看Release的结果保存路径:图中的构建目录-->plugins-->sqldrivers
6.将文件复制到文章最开始的mingw_64-->plugins-->sqldrivers文件夹中
7.这个时候,你去运行自己的项目,你会发现仍然连接失败,但是可用的驱动中又包含了"QMYSQL"。我们还缺少了2个重要文件
8.找到Mysql安装目录,将lib文件夹中的libmysql.dll、libmysql.lib文件复制到QT安装目录的mingw_64-->bin文件夹中
7.重新运行项目,连接数据库成功,不再报错“QMYSQL driver not loaded”
注意:qsqlmysql.dll文件是和自己当前使用的mysql版本绑定的,更换了mysql版本之后,是需要重新生成.dll文件的