Windows下Qt5.7+MinGW5.3连接MariaDB10.2驱动未加载求助
解决Qt中QMYSQL驱动未加载的问题
兄弟,搜10小时还卡在这里太闹心了——Qt的数据库驱动坑确实容易让人头大,咱们一步步捋清楚,先从最简单的方案试,实在不行再碰编译。
一、先试不用编译的快速解法(能绕编译就绕)
- 先查Qt自带的驱动文件:去你的Qt安装目录找
plugins/sqldrivers文件夹,看看有没有qsqlmysql.dll(Windows)或者libqsqlmysql.so(Linux/macOS)。要是有这个文件,那根本不是驱动的问题,是MySQL客户端库没被找到:- Windows:把MySQL Connector里的
libmysql.dll(注意要和你的Qt位数、编译器匹配!比如32位Qt就用32位库,MSVC编译的Qt就用对应MSVC版本的库)复制到你的Qt程序运行目录,或者加到系统PATH环境变量里。 - Linux:先装系统包,比如Debian/Ubuntu装
libmariadb-dev,然后把/usr/lib/x86_64-linux-gnu/libmariadb.so软链接到Qt的sqldrivers目录,或者直接把这个路径加到LD_LIBRARY_PATH里。 - macOS:用Homebrew装
mariadb-connector-c,然后把/usr/local/lib/libmysqlclient.dylib复制到Qt的sqldrivers目录,或者设置DYLD_LIBRARY_PATH。
- Windows:把MySQL Connector里的
- 换MariaDB的库试试:MariaDB和MySQL是完全兼容的,而且很多系统默认带MariaDB的库,兼容性反而比MySQL官方库更好,直接用它的客户端库大概率能解决问题。
二、libmariadb vs libmysqldb怎么选?
- 优先选libmariadb:这是MariaDB官方的客户端库,更新快,bug修复及时,对新特性的支持也到位,而且完全兼容所有MySQL版本,踩坑概率低。
- libmysqldb(MySQL官方库):如果用这个,遇到MySQL 8.0+版本可能会有认证问题(默认的
caching_sha2_password旧驱动不支持),还要去改MySQL的用户认证方式,比较麻烦,除非你必须用MySQL官方的库,否则不推荐。
三、什么时候必须自己编译驱动?
要是上面的方法都不管用,比如你的Qt版本特别老,或者用了特殊编译器(比如MinGW和MSVC混着用),那只能自己编译QMYSQL驱动了:
- 先装MySQL/MariaDB的开发包,必须要头文件和静态库,光装客户端没用。
- 找到Qt源码里的
qtbase/src/plugins/sqldrivers/mysql目录(要是没装Qt源码,得先去Qt安装器里补上)。 - 修改
mysql.pro文件,指定头文件和库的路径,举个Linux下的例子:INCLUDEPATH += /usr/include/mariadb LIBS += -L/usr/lib/x86_64-linux-gnu -lmariadb - 用qmake生成Makefile,然后编译(Linux/macOS用
make,Windows在Qt Creator里直接构建就行)。 - 把编译出来的驱动文件(比如
libqsqlmysql.so或者qsqlmysql.dll)复制到Qt的plugins/sqldrivers目录,或者你的程序运行目录。
四、几个容易忽略的排查点
- 位数必须匹配:32位Qt一定要配32位的MySQL/MariaDB库,64位同理,这是最容易踩的低级错误!
- MySQL 8.0+的认证问题:如果用的是MySQL 8.0以上版本,默认用户认证是
caching_sha2_password,旧版QMYSQL驱动不支持,要么把用户的认证方式改成mysql_native_password(比如ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'test';),要么用支持新认证的驱动(比如编译新版Qt的驱动,或者用MariaDB的库)。 - 先确认驱动列表:在代码里加一行
qDebug() << QSqlDatabase::drivers();,看看QMYSQL是不是在支持的驱动列表里,要是不在,那就是驱动没装对。
内容的提问来源于stack exchange,提问作者Francois Giguere
相关产品推荐
相关产品推荐

