前言
最近需要使用Qt连接MySQL,毫无疑问涉及到了编译MySQL驱动,以及QSqlDatabase: QMYSQL driver not loaded的问题。 网络上其他文章分为几大类:
- 1、编译好MySQL驱动,莫名其妙就使用成功了。
这种情况是因为MySQL使用的是5.x。 - 2、使用MySQL connector c 6.11编译MySQL驱动。
这种方法编译出来的驱动是5.x的,因为MySQL connector c最后版本是2017年,可以链接,但是需要修改MySQL 8.0的密码策略。 - 3、使用MySQL 8.0自带的头文和库进行编译。
无法链接。 上述几大类都有一个共同操作,就是把libmysql.dll复制到Qt的bin目录下。 但是!上面这些方法要么无法连接,要么需要修改MySQL密码策略。通常我们没有权限去侵入式修改MySQL配置。
解决
本文默认用户安装完毕MySQL8.0,运行环境Windows10,Qt版本6.2.2,使用Cmake+Mingw编译x86_64版本
1、编译MySQL驱动器
首先配置Cmake 这里要注意,CMAKE_MAKE_PROGRAM一定要是64位版本,且必须是Qt自带的Mingw,Cmake Generator为CodeBlocks - MinGW Makefiles,MySQL要指定自己的MySQL安装位置里的include和lib。 而后,执行generate。 然后是编译,这里不能直接去make命令,必须使用QT自带的mingw,存放在Qt安装目录的Tools内,使用绝对路径去使用这个make:
E:\Qt\Tools\mingw900_64\bin\mingw32-make.exe
编译成功后,在插件文件夹内会看到qsqlmysql.dll和qsqlmysql.debug
2、配置
这是重点,其他文章只说了将libmysql.dll复制到Qt安装目录,这是不行的。会直接无法加载驱动,5.x版本的驱动(使用MySQL connector c 6.11编译驱动)会直接报错:
Authentication plugin 'caching_sha2_password' cannot be loaded: ????????????顣\r\nQMYSQL: Unable to connect
而遇到这种问题某些文章就告诉说去MySQL里修改密码策略,我就问你,公司的服务器你想进去修改东西???分分钟开除你。咋想的,自己配置不对就去侵入式修改别人的东西而不从自身找问题。
然后大家就开始疯狂找文章,发现每一篇文章都大同小异。
其实正确的方法非常简单。
终极大法
将mysql的bin目录内的libcrypto-1_1-x64.dll、libprotobuf.dll、libssl-1_1-x64.dll连同lib内的libmysql.dll一同复制到Qt的bin目录下:E:\Qt\6.2.2\mingw_64\bin或者是自己开发的程序的运行目录。 即可。这样也不需要修改密码策略了。
|