📃 前言
写这篇文章的目的,纯粹是因为这两天玩 Qt 的时候,被 MySQL 给整的烦不行🤦♂️,总是连接不上,尝试了很多解决办法之后,终于是解决了,记录一下吧。
先介绍下使用的版本信息:
Qt 5.14.2
MySQL 8.0.20 x64
💡 由来
首先要明确下这个问题为什么会产生?
其实就是因为这个版本的 Qt 缺少了支持 MySQL 8.0.20 的驱动文件,但 Qt 官方在其目录下给了编译该驱动文件的工程,用户可以自行编译。
这里,不得不提一句,最好还是用新版本的软件,新版本的软件应该不会存在这样的问题了。😂
🔨 解决办法
问题的产生明确之后,那么如何解决呢?
其实也很简单,给 Qt 相应的驱动文件就可以了。
如何获取这个文件的方法就很多了,可以去网上下载,也可以自行编译,这里只介绍一下自行编译的方法。
1. 添加 MySQL 库文件到 Qt 中
将 MySQL 安装路径C:\Program Files\MySQL\MySQL Server 8.0\lib
目录下的libmysql.dll
和libmysql.lib
这两个文件放到 Qt 安装目录D:\Qt\Qt5.14.2\5.14.2\mingw73_64\bin
目录下。
2. 编译 Qt 中的 MySQL 的工程文件
用 Qt Creator 打开路径D:\Qt\Qt5.14.2\5.14.2\Src\qtbase\src\plugins\sqldrivers\mysql
中的mysql.pro
工程文件,选择编译器MinGw 64-bit
(一定要选 64 位的)。
接着,修改这个工程中mysql.pro
和qsqldriverbase.pri
两个文件:1
2
3
4
5
6
7- QMAKE_USE += mysql # 注释掉这句
+ OTHER_FILES += mysql.json # 添加这句
# 添加下面三句
+ INCLUDEPATH += "C:\Program Files\MySQL\MySQL Server 8.0\include"
+ LIBS += "C:\Program Files\MySQL\MySQL Server 8.0\lib\libmysql.lib"
+ DESTDIR = ../mysql/lib # 构建成功的文件输出目录,即当前工程目录下 lib 中
1 | - include($$shadowed($$PWD)/qtsqldrivers-config.pri) # 注释掉这句 |
点击右小角的构建,这里会在该工程目录中会看到新增的子目录lib
,打开后可以看到libqsqlmysql.a
、qsqlmysql.dll
和qsqlmysql.dll.debug
三个文件。
3. 将编译好的驱动文件添加到 Qt 中
将 2 中编译好的三个文件,直接放到D:\Qt\Qt5.14.2\5.14.2\mingw73_64\plugins\sqldrivers
这个目录中即可。
🎈 其他问题
Q1:如果是 MinGW32 编译器能直接编译 64 位的 MySQL 数据库文件吗?
A1:最好保持一致,在网上查到过有人说 32 位的 MinGW 编译器也可以使用 64 位的库文件,但尝试后发现不行。
Q2:在 Qt Creator 中点击构建后不生成指定目录和文件,怎么办?
A2:多半是编译过程或者与编译相关的文件有问题,仔细检查一下解决办法中的第二步中的两个工程文件。或者在 Qt Creator 中在项目mysql
单击右键,选择清除,再尝试重新构建。
Q3:MinGW 32位编译器可以直接用 64 位编译好的文件吗?
A3:尝试了之后,不行。