Qt 6.2.2连接MySQL8.0.28且无需修改MySQL密码策略的方法

  • Post author:
  • Post category:mysql




前言

最近需要使用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

,plugin目录中的

authentication_fido_client.dll、authentication_kerberos_client.dll、authentication_oci_client.dll

连同lib内的

libmysql.dll

一同复制到Qt的bin目录下:E:\Qt\6.2.2\mingw_64\bin或者是自己开发的程序的运行目录。

在这里插入图片描述

在这里插入图片描述

即可。这样也不需要修改密码策略了。



版权声明:本文为SiriusWilliam原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。