mysql Qt连接mysql方法_mysql C++类库配置

来源:这里教程网 时间:2026-02-28 20:35:56 作者:

Qt 项目中添加 MySQL 驱动支持(Windows / Linux)

Qt 默认不自带 MySQL 插件,

QSqlDatabase::addDatabase("QMYSQL")
会失败,报错
"QMYSQL driver not loaded"
"Driver not loaded"
。核心原因是:Qt 编译时没链接 MySQL 客户端库,或运行时找不到
libmysql.dll
(Windows)或
libmysqlclient.so
(Linux)。

实操分三步:确认 Qt 版本与 MySQL 库架构一致(x64/x86)、把 MySQL 客户端动态库放到可加载路径、在 Qt 构建目录中补全

sqldrivers/qsqlmysql.dll
(Windows)或
.so
(Linux)。

Windows 下优先用 MySQL 官方提供的
libmysql.dll
(不是
mysqlclient.lib
静态库),版本建议与服务端一致(如 MySQL 8.0.33 → 用对应版本的库)
Linux 下需安装
libmysqlclient-dev
(Ubuntu/Debian)或
mariadb-devel
(CentOS/RHEL),再重新编译 Qt 的
qsqlmysql
插件
Qt Creator 中检查
QT_DEBUG_PLUGINS=1
环境变量,运行时可看到插件加载失败的具体原因(比如找不到
libssl.so.1.1

手动编译 qsqlmysql 插件(Linux 常见场景)

多数 Linux 发行版 Qt 包不含 MySQL 插件,且系统级 MySQL 开发包路径不统一,必须自己编译。关键不是“能不能连”,而是“插件有没有被 Qt 正确识别并加载”。

假设 Qt 安装在

/opt/Qt/6.5.3/gcc_64
,MySQL 头文件和库在
/usr/lib/x86_64-linux-gnu/libmysqlclient.so
/usr/include/mysql

立即学习“C++免费学习笔记(深入)”;

cd /opt/Qt/6.5.3/Src/qtbase/src/plugins/sqldrivers/mysql
qmake "INCLUDEPATH+=/usr/include/mysql" "LIBS+=-L/usr/lib/x86_64-linux-gnu -lmysqlclient" mysql.pro
make
sudo make install

生成的

libqsqlmysql.so
会被复制到
/opt/Qt/6.5.3/gcc_64/plugins/sqldrivers/
。注意:
qmake
必须用当前 Qt 版本的,不能混用;
LIBS
中的
-lmysqlclient
依赖 OpenSSL 和 zlib,若报
undefined reference to SSL_*
,需加
-lssl -lcrypto

Qt C++ 连接代码里容易漏掉的初始化项

QSqlDatabase
对象本身不自动触发驱动加载,必须显式调用
QSqlDatabase::addDatabase("QMYSQL")
,且要在创建任何
QApplication
实例之前(尤其在子线程中使用时)。

必须设置
setHostName()
setDatabaseName()
setUserName()
setPassword()
,缺一不可;空密码不能传
nullptr
,得传空字符串
""
MySQL 8.0+ 默认认证插件是
caching_sha2_password
,Qt 5.12+ 支持,但旧 Qt(如 5.9)会连接失败,错误信息类似
"Authentication plugin 'caching_sha2_password' cannot be loaded"
—— 此时需在 MySQL 侧执行
ALTER USER 'user'@'host' IDENTIFIED WITH mysql_native_password BY 'pwd';
连接后务必检查
db.open()
返回值,不要只看
lastError()
字符串是否为空,有些底层错误(如 DNS 解析超时)会静默失败

Qt + MySQL 在 Windows 上 DLL 加载路径陷阱

即使

qsqlmysql.dll
已放在
plugins/sqldrivers/
,仍可能报
"Driver not loaded"
—— 因为该 DLL 依赖
libmysql.dll
,而 Windows 不会从插件目录自动搜索其依赖项。

最稳方案:把
libmysql.dll
复制到 Qt 可执行文件所在目录(即
build-xxx/Debug/
build-xxx/Release/
),不是
plugins/
目录
次选方案:把
libmysql.dll
所在路径加进系统
PATH
,但调试时容易混淆不同版本(比如同时装了 XAMPP 和 MySQL Server)
绝对避免:用
QCoreApplication::addLibraryPath()
添加插件路径——它只影响插件本身,不影响插件的 DLL 依赖

Dependency Walker
(Windows)或
ldd qsqlmysql.dll
(Linux)查实际缺失的依赖,比猜更可靠。

相关推荐