При компиляции проекта в Windows 10 в Qt5, связанного с MySQL, появляется ошибка:
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7
Далее проверяем действительно ли отсутствует драйвер MySql.
В .pro файле прописываем
QT + = sql
и добавляем
#include <QSqlDatabase> #include <QDebug> qDebug()<< QSqlDatabase::drivers();
Получаем вывод:
(«QSQLITE», «QODBC», «QODBC3», «QPSQL», «QPSQL7»)
Драйвер MySql отсутствует.
В итоги, ошибка связана с тем, что отсутствует драйвер MYSQL и его необходимо скомпилировать самостоятельно из исходников mysql
C:\Qt\Qt5.12.12\5.12.12\Src\qtbase\src\plugins\sqldrivers\mysql
Если отсутствует папка Source, устанавливаем через MaintenanceTool.exe (C:\Qt\Qt5.12.12).
Устанавливаем пакет MYSQL — mysql-installer-community-8.0.32.0.msi и пакет MySQL Connector C 6.1
Устанавливаем в переменные среды Path
C:\Qt\Qt5.12.12\5.12.12\mingw73_64\bin, где лежит qmake.exe
C:\Qt\Qt5.12.12\Tools\mingw730_64\bin, где лежит mingw32-make.exe
C:\Program Files\MySQL\MySQL Connector C 6.1\lib
Состояние переменной среды можно посмотреть командой строке MinGW 7.3.0.64-bit
echo %PATH%
1 способ
Добавим пути в программе Qt Creator к библиотеки MySQL
Нажимаем правой клавишей мыши по проекту и открывается меню и жмём Добавить библиотеку
Тип библиотеки — внешняя и Далее
Снимаем галочки с Linux, Mac и жмём файл библиотеки и указываем путь C:\Program Files\MySQL\MySQL Server 8.0\lib к библиотеки libmysql.lib
Жмем Далее и Завершить.
Файл .pro станет выглядеть так
TARGET = qsqlmysql HEADERS += $$PWD/qsql_mysql_p.h SOURCES += $$PWD/qsql_mysql.cpp $$PWD/main.cpp #QMAKE_USE += mysql win32:CONFIG(release, debug|release): LIBS += -L$$PWD/'../../../../../../../../../Program Files/MySQL/MySQLServer/lib/' -llibmysql else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/'../../../../../../../../../Program Files/MySQL/MySQLServer/lib/' -llibmysqld INCLUDEPATH += $$PWD/'../../../../../../../../../Program Files/MySQL/MySQLServer/include' DEPENDPATH += $$PWD/'../../../../../../../../../Program Files/MySQL/MySQLServer/include' OTHER_FILES += mysql.json PLUGIN_CLASS_NAME = QMYSQLDriverPlugin #include(../qsqldriverbase.pri)
Если во время компиляции появится ошибки
Cannot read C:/Qt/Qt5.12.12/5.12.12/Src/qtbase/src/plugins/sqldrivers/qtsqldrivers-config.pri: No such file or directory
или
Project ERROR: Library ‘mysql’ is not defined.
нужно закомментировать строчки
#QMAKE_USE += mysql
#include(../qsqldriverbase.pri)
После компиляции в директории
C:\Qt\Qt5.12.12\5.12.12\Src\qtbase\src\plugins\sqldrivers\plugins\sqldrivers
появятся файлы
libqsqlmysql.a, libqsqlmysqld.a, qsqlmysql.dll, qsqlmysqld.dll
и копируем их в папку
C:\Qt\Qt5.12.12\5.12.12\mingw73_64\plugins\sqldrivers
2 способ
Устанавливаем MySQL Connector C 6.1 и желательно ставить не в папку Program Files, а в отдельную. Открываем исходник MySQL и в файле .pro в ручную прописываем пути к библиотеки MySQL.
TARGET = qsqlmysql HEADERS += $$PWD/qsql_mysql_p.h SOURCES += $$PWD/qsql_mysql.cpp $$PWD/main.cpp #QMAKE_USE += mysql #LIBS += -LC:\Program Files\MySQL\MySQL Connector C 6.1\lib #-lmysql #win32:CONFIG(release, debug|release): LIBS += -L$$PWD/'../../../../../../../../../Program Files/MySQL/MySQL Connector C 6.1/lib/' -llibmysql #else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/'../../../../../../../../../Program Files/MySQL/MySQL Connector C 6.1/lib/' -llibmysqld #INCLUDEPATH += $$PWD/'../../../../../../../../../Program Files/MySQL/MySQL Connector C 6.1/include' #DEPENDPATH += $$PWD/'../../../../../../../../../Program Files/MySQL/MySQL Connector C 6.1/include' OTHER_FILES += mysql.json PLUGIN_CLASS_NAME = QMYSQLDriverPlugin #include(../qsqldriverbase.pri) INCLUDEPATH += "C:\MySQLConnector6\include" LIBS +="C:\MySQLConnector6\lib\libmysql.lib" DESTDIR = ../mysql/lib/
компилируем и в папке
C:\Qt\Qt5.12.12\5.12.12\Src\qtbase\src\plugins\sqldrivers\plugins\sqldrivers
появятся файлы
и копируем их в директорию
C:\Qt\Qt5.12.12\5.12.12\mingw73_64\plugins\sqldrivers
И также файл libmysql.dll и libmysql.lib копируем из директории
C:\MySQLConnector6\lib
в директорию
C:\Qt\Qt5.12.12\5.12.12\mingw73_64\bin
3 способ
Устанавливаем MySQL Connector C 6.1 и запускаем командную строку в
Переходим в папку
cd C:\Qt\Qt5.12.12\5.12.12\Src\qtbase\src\plugins\sqldrivers\mysql
и вводим
qmake — MYSQL_INCDIR=C:/MySQLConnector6/include/ MYSQL_LIBDIR=C:/MySQLConnector6/lib
mingw32-make.exe
и в директории
C:\Qt\Qt5.12.12\5.12.12\Src\qtbase\src\plugins\sqldrivers\plugins\sqldrivers
получаем файлы
Исходник MySQL можно скачать отсюда https://www.matematicus.ru/wp-content/uploads/2023/02/mysql.zip.
C:\Qt\Qt5.12.12\5.12.12\mingw73_64\bin
C:\Qt\Qt5.12.12\5.12.12\Src\qtbase\src\plugins\sqldrivers\mysql\lib