最近更新QT后,发现版本没有内置mysql数据库驱动,qt报错的提示"QSqlDatabase: QMYSQL driver not loaded,QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7".从这里可以清晰的知道目前,qt5.12.3及以上和qt5.13.0及以上,均没有mysql的驱动,mysql的驱动名是QMYSQL.因为没有在有效的驱动里,所以就需要自己编译配置了。参考网上的教程,亲测有效并做个记录。
QT版本:Qt5.12.9。(没有mysql驱动的QT版本,一定要安装源代码)
MYSQL官网链接:https://dev.mysql.com/downloads/mysql/
Qt相关文档:https://doc.qt.io/qt-5/sql-driver.html#qmysql
第一步、安装MYSQL8.0,以及mysql connector。
在mysql官网下载的最新版本的*.msi安装程序,以及32位的connector。此外,编译Qt MYSQL驱动需要C的connector而不是C++的。因为我Qt是mingw是32位,所以还需要装x86的C connector。
如下图,进入mysql 官网,找到connector下载路径。
之后再安装下载mysql8.0,按引导安装就好了。
注意:mysql8.0改变了加密规则,MYSQL8.0之前的版本中加密规则是mysql_native_password,而在MYSQL8.0之后,加密规则是caching_sha2_password。安装过程中注意加密选择,若忘记选也无所谓,安装后
打开MYSQL的命令行工具(MySql 8.0 Command Line Client),执行:
- use mysql;
- alter user 'root'@'localhost' identified with mysql_native_password by '密码';
第二步,使用QtCreator编译MYSQL驱动插件
首先,打开qt安装目录找到,打开源码MYSQL插件的工程(我的路径D:\Qt\Qt5.12.9\5.12.9\Src\qtbase\src\plugins\sqldrivers\mysql)。
然后,修改pro文件,去掉QMAKE_USE这一行,把MYSQL的C库添加进来:
TARGET = qsqlmysql
HEADERS += $$PWD/qsql_mysql_p.h
SOURCES += $$PWD/qsql_mysql.cpp $$PWD/main.cpp
#QMAKE_USE += mysql
OTHER_FILES += mysql.json
PLUGIN_CLASS_NAME = QMYSQLDriverPlugin
include(../qsqldriverbase.pri)
#该路径是下载解压后的MySQL Connector C 的头文件路径
INCLUDEPATH +="C:\Program Files (x86)\MySQL\MySQL Connector C 6.1\include"
#这是刚才下载解压后的MySQL Connector C 的库文件路径
LIBS +="C:\Program Files (x86)\MySQL\MySQL Connector C 6.1\lib\libmysql.lib"
为了方便查找,不妨增加一条语句,该语句用来指明编译后的结果输出的位置