Qt MySQL 驱动编译安装
为什么MySQL驱动需要单独编译?
Qt SQL模块使用驱动程序插件与不同的数据库api进行通信。由于Qt的SQL模块API是数据库独立的,所有数据库特定的代码都包含在这些驱动程序中
- 考虑到添加MySQL和数据库驱动,会导致依SDK体积增加
- 同时防止与MySQL的许协议相冲突
- 不同开发环境以及可能使用的不同数据库的不同版本可能导致兼容性的问题
所以开发者需要根据自己的环境自行编译相应的数据库驱动,以便能够使用这些数据库系统
报错信息
默认情况下Qt并没有MySQL驱动所以就会输出一下信息
QSqlDatabase: QMYSQL driver not loaded |
如果开启 QT_DEBUG_PLUGINS=1
可以看到详细信息
本机开发环境
- windows 10
- Qt 6.2
- MySQL 5.7
- MinGW-W64-builds 14.2.0-rt_v12-rev0
- Power Shell 7.4.5
使用预编译的插件
qt_mysql_driver这个库中包含了已经编译好的驱动插件,可以免去很多痛苦!,直接下载就好了!
安装方式请参照README
手动编译MySQL插件
How to build the QMYSQL plugin on Windows Mac和Linux系统请参阅官方文档,具体细节大体相同
MySQL开发组件获取
需要MySQL安装程序(例如MySQL web installer或MariaDB C Connector)。运行安装程序,选择自定义安装并选择与Qt(x86或x64)匹配的MySQL C Connector。安装后检查所需文件是否存在:
<MySQL dir>/lib/libmysql.lib
<MySQL dir>/lib/libmysql.dll
<MySQL dir>/include/mysql.h
我安装的5.7版本自带Connector,8.x版本貌似需要单独选择安装,具体请根据自己的版本决定
构建
# 添加Qt自带的Ninja构建系统、cmake、以及qt-cmake |
为什么使用Ninja 而不是Cmake?
因为我的Qt版本如果不使用Ninja,会弹出提示建议使用Ninja,否则可能会出现问题…
编译
# 类似于make |
- 任何路径不能包含中文和空格,如果MySQL采用默认安装很可能包含空格,只能重装了!!!
- 编译器版本需要支持C++17!!!
在 D:\ENV\Qt\QT\6.5.3\Src\qtbase\src\plugins\sqldrivers\build-sqldrivers\plugins\sqldrivers
中就存放了编译好的插件
安装
# 类似于make install |
添加MySQL库
将 libmysql.dll (MySQL library) 复制到任何一个存在于系统变量PATH的路径中,或则可以被Qt程序加载的路径中
我选择复制到 D:\ENV\Qt\QT\6.5.3\mingw_64\bin
中
具体请查阅官方文档 How to build the QMYSQL plugin on Windows
When you distribute your application, remember to include libmysql.dll / libmariadb.dll in your installation package. It must be placed in the same folder as the application executable. libmysql.dll additionally needs the MSVC runtime libraries which can be installed with vcredist.exe
如果依然无法正确的加载MySQL deriver
请下载 Dependencies分析依赖包并添加,具体使用方式请查看README
测试
void MainWidget::connectDB() |