You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Qt 5.14.2连接MySQL 8.0(TLS≥1.2)失败,求解决方案

解决Qt 5.14.2 MySQL客户端无法连接TLS 1.2+的MySQL 8.0问题

核心原因

Qt 5.14.2默认适配的MySQL客户端库(libmysqlclient)版本可能偏旧,对TLS 1.2及更高版本的支持不完善,且QSqlDatabase没有直接暴露TLS配置API,但可以通过以下几种方式解决:

解决方案

1. 通过连接选项指定TLS参数

MySQL本身支持通过连接参数强制指定TLS版本,你可以利用QSqlDatabase::setConnectOptions()传递这些参数:

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("你的服务器地址");
db.setDatabaseName("目标数据库名");
db.setUserName("用户名");
db.setPassword("密码");

// 设置强制TLS模式及支持的版本
db.setConnectOptions(
    "MYSQL_OPT_SSL_MODE=REQUIRED;"
    "MYSQL_OPT_TLS_VERSION=TLSv1.2,TLSv1.3"
);

if (!db.open()) {
    qDebug() << "连接失败:" << db.lastError().text();
}
  • MYSQL_OPT_SSL_MODE=REQUIRED:强制使用SSL/TLS连接,拒绝非加密连接
  • MYSQL_OPT_TLS_VERSION=TLSv1.2,TLSv1.3:限定仅使用TLS 1.2或1.3协议

2. 替换高版本的libmysqlclient库

Qt的MySQL驱动依赖系统或Qt自带的libmysqlclient库,如果当前使用的库版本低于MySQL 8.0,可能不支持TLS 1.2+:

  • 下载MySQL 8.0官方提供的客户端库(包含libmysqlclient.so/dll)
  • 将库文件替换到Qt的plugins/sqldrivers目录下,或者确保系统的库路径优先加载高版本库

3. 重新编译Qt MySQL驱动并启用TLS支持

如果Qt自带的驱动未编译TLS支持,需要手动重新编译:

  1. 找到Qt源码中MySQL驱动的目录(通常在qtbase/src/plugins/sqldrivers/mysql)
  2. 使用qmake指定MySQL 8.0的库路径(以Linux为例):
qmake "INCLUDEPATH+=/usr/local/mysql/include" "LIBS+=-L/usr/local/mysql/lib -lmysqlclient" mysql.pro
  1. 执行编译安装:
make && make install

编译完成后,新驱动会替换原有的QMYSQL插件,确保链接到支持TLS 1.2+的MySQL库。

4. 检查系统OpenSSL版本

Qt的TLS实现依赖OpenSSL,确保系统安装的OpenSSL版本不低于1.0.2(推荐1.1.x或更高):

  • Linux:通过openssl version查看版本,若过低则升级
  • Windows:将OpenSSL的libeay32.dll和ssleay32.dll放到程序运行目录或系统路径中

内容的提问来源于stack exchange,提问作者nabil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 08:35:02