AI 文章摘要
由于需要,不得不用Qt连接MySQL以进行数据的永久保存以及一些开发需求,但是Qt成功连接数据库并进行数据库操作的过程往往是有点复杂,事实也确实如此,不像什么IDEA一样简洁明了,就此记录一下在此过程中遇到的错误以及如何解决。
首先,推荐下5.9或者5.12版本的Qt,下载地址在此。因为根据我连续查看多个Qt版本下的sqldivers的文件,暂时发现这俩个版本下的sqldivers里有qsqlmysql.ddl和qmysqld.ddl驱动插件,而这两个插件,就是Qt连接数据库并成功执行的关键,如下:

其次还需要一个由MySQL 官方提供的 C 语言客户端库,用来在 C/C++ 程序中与 MySQL 数据库进行交互,叫mysql-connector-c,可以去官网下载,或者在这(注:自行选择版本,如果你的编译器是64位的,得下64位的,如果是32位的编译器就得下32位的),下好后,进入到lib文件,把libmysql.ddl(我的路径是D:\MYSQLconectODBCx32\mysql_conector_cx64\lib)复制到Qt的编译器的bin文件里(我的路径是D:\Qt\5.12.0\mingw73_64\bin),这样以后代码中加上你的数据库名与用户密码之后就能愉快的连接到MySQL数据库,也能操作了。

正常情况是能使用了,但是,如果一运行Qt项目又报错,错误信息如下
打开数据库时出错: “SSL connection error: unknown error number QMYSQL: Unable to connect”
此时就是SSL的问题了,因为SSL打开了,那么就要关闭SSL服务,那么如何查看是不是真打开了呢,首先打开MySQL数据库然后进入到命令行

输入数据库密码后输入命令 SHOW VARIABLES LIKE '%ssl%';

然后进入my.ini文件里加一条语句 skip_ssl,得加在mysqld下,如

如果找不到my.ini的位置,首先,右键此电脑->服务,然后往下滑到MySQL位置右键属性就能看到,如图

改完后重启一下MySQL服务即可,你就会发现SSL服务已关闭,此时你就会发现成功连接并启动打开数据库了!


但是,有些电脑还会遇到问题,就比如我用的另一台电脑报错:
“Authentication plugin ‘caching_sha2_password’ cannot be loaded: 找不到指定的模块。\r\nQMYSQL: Unable to connect”
原因是 MySQL 服务器配置了 caching_sha2_password 认证插件,而你的 MySQL 客户端(在这里是 Qt 应用程序)可能不支持或者没有正确配置这个插件,此时更改 MySQL 用户的认证插件即可。命令行输入 select user,host,plugin from mysql.user;你会看到

然后再执行 ALTER USER 'username'@'localhost' IDENTIFIED WITH 'mysql_native_password' BY 'password';(其中,'username'@'localhost' 是你的用户名和主机,'password' 是你的新密码,密码可自己设置)。

最后再执行一下 flush privileges;即可。
此时所有错误就都解决了,可以直接用了,成功连接并成功执行。(注:在pro文件里,要加上QT += sql这段代码)
