Windows系统下QT5.9连接MYSQL 8.0以上驱动版本过低问题
1.编译Windows下驱动编译QT SQL相关驱动这里特别需要注意64和32位问题如果是32位的QT mingw编译64位会失败无法识别驱动编译可以参考下面文章需要注意的时候在编译之前看一下步骤2https://www.cnblogs.com/qq21497936/p/17246609.html前言 之前特定的mysql版本msvc版本已经调通了但是为了更好的跨平台所以选择用mingw32版本于是需要编译mysql驱动的mingw32版本的驱动库以便提供给qt连接mysql使用。 编译环境 Qt5.9.3 mingw32 安装得时候记得要勾选上源码 mysql-installer-https://www.cnblogs.com/qq21497936/p/17246609.html2.查看高版本数据库信息当前 32 位libmysql.dll只支持较旧的 TLS 协议而服务器可能只允许 TLS 1.2 或更高版本。在其他能够连接该数据库的客户端中执行一下命令SELECT VERSION(); SHOW VARIABLES LIKE tls_version; SHOW VARIABLES LIKE require_secure_transport; SHOW VARIABLES LIKE have_ssl;如果出现tls_version TLSv1.2说明服务器只允许 TLS 1.2而当前libmysql.dll较旧就会出现你现在的错误。MySQL 新版本已经逐步弃用或移除 TLS 1.0、TLS 1.1客户端和服务器必须存在共同支持的 TLS 版本。在这个情况下再次执行命令SHOW VARIABLES LIKE require_secure_transport; SHOW VARIABLES LIKE have_ssl;如果出现require_secure_transport OFF则服务器端已经确认“不强制加密连接”因此可以绕过当前 TLS 1.2 不兼容问题。3.重新编译驱动找到C:\Qt\Qt5.9.9\5.9.9\Src\qtbase\src\plugins\sqldrivers\mysql\qsql_mysql.cpp这个文件此处是我的安装路径找到这段函数if (!(d-mysql mysql_init((MYSQL*) 0))) { ... return false; }在它的下面插入// 在这里插入关闭SSL关键位置 #if defined(MYSQL_VERSION_ID) MYSQL_VERSION_ID 50711 unsigned int sslMode SSL_MODE_DISABLED; mysql_options(d-mysql, MYSQL_OPT_SSL_MODE, sslMode); #endif重新编译将生成的这两个文件进行替换