64位
软件版本
参考 https://doc.qt.io/qt-5/sql-driver.html#qmysql
MySQL 5.7.34 版本
QT 5.14.2
https://download.qt.io/archive/qt/5.14/5.14.2/
qt-opensource-windows-x86-5.14.2.exe
VS 2017(社区版本)
----------------------------------------------------------------------------------
VS QT连接mysql,没有驱动,需要手动编译mysql
编译环境:
- 系统: WIndows 10 64位
- Qt版本:Qt5.14
- 编译工具: visual studio 2017 、msvc2017_64的qmake
1将qmake所在路径加入环境变量PATH,如D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\bin
2更改mysql的pro文件
到目录D:\Qt\Qt5.14.2\5.14.2\Src\qtbase\src\plugins\sqldrivers\mysql,
编辑mysql.pro文件,将第6行QMAKE_USE += mysql注释掉
添加数据库sdk的include目录及库文件,保存并关闭
TARGET = qsqlmysql
HEADERS += $$PWD/qsql_mysql_p.h
SOURCES += $$PWD/qsql_mysql.cpp $$PWD/main.cpp
#QMAKE_USE += mysql
INCLUDEPATH+="C:/Program Files/MySQL/MySQL Server 5.7/include"
LIBS+="C:/Program Files/MySQL/MySQL Server 5.7/lib/libmysql.lib"
OTHER_FILES += mysql.json
PLUGIN_CLASS_NAME = QMYSQLDriverPlugin
include(../qsqldriverbase.pri)
3打开QT终端
进入mysql目录,执行qmake
Setting up environment for Qt usage...
Remember to call vcvarsall.bat to complete environment setup!
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64>cd D:\Qt\Qt5.14.2\5.14.2\Src\qtbase\src\plugins\sqldrivers\mysql
D:\Qt\Qt5.14.2\5.14.2\Src\qtbase\src\plugins\sqldrivers\mysql>qmake "INCLUDEPATH+=C:/Program Files/MySQL/MySQL Server 5.7/include" "LIBS+=C:/Program Files/MySQL/MySQL Server 5.7/lib/libmysql.lib" mysql.pro
D:\Qt\Qt5.14.2\5.14.2\Src\qtbase\src\plugins\sqldrivers\mysql>
4打开Vs 2017 的命令行工具
进入目录,qmake,nmake即可
**********************************************************************
** Visual Studio 2017 Developer Command Prompt v15.9.36
** Copyright (c) 2017 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x64'
D:\Program Files (x86)\Microsoft Visual Studio\2017\Community>cd D:\Qt\Qt5.14.2\5.14.2\Src\qtbase\src\plugins\sqldrivers\mysql
D:\Qt\Qt5.14.2\5.14.2\Src\qtbase\src\plugins\sqldrivers\mysql>qmake -- MYSQL_INCDIR="C:/Program Files/MySQL/MySQL Server 5.7/include" MYSQL_LIBDIR="C:/Program Files/MySQL/MySQL Server 5.7/lib/libmysql.lib"
D:\Qt\Qt5.14.2\5.14.2\Src\qtbase\src\plugins\sqldrivers\mysql>nmake
Microsoft (R) 程序维护实用工具 14.16.27045.0 版
版权所有 (C) Microsoft Corporation。 保留所有权利。
"D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\HostX64\x64\nmake.exe" -f Makefile.Release all
Microsoft (R) 程序维护实用工具 14.16.27045.0 版
版权所有 (C) Microsoft Corporation。 保留所有权利。
link /NOLOGO /DYNAMICBASE /NXCOMPAT /DEBUG /OPT:REF /INCREMENTAL:NO /DLL /SUBSYSTEM:WINDOWS /VERSION:5.14 /OUT:..\plugins\sqldrivers\qsqlmysql.dll @C:\Users\mxpwa\AppData\Local\Temp\nmBC73.tmp
正在创建库 ..\plugins\sqldrivers\qsqlmysql.lib 和对象 ..\plugins\sqldrivers\qsqlmysql.exp
"D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\HostX64\x64\nmake.exe" -f Makefile.Debug all
Microsoft (R) 程序维护实用工具 14.16.27045.0 版
版权所有 (C) Microsoft Corporation。 保留所有权利。
cl -BxD:\Qt\Qt5.14.2\5.14.2\msvc2017_64\bin\qmake.exe -nologo -Zc:wchar_t -FS -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:__cplusplus -Zi -MDd -std:c++17 -utf-8 /wd4530 /wd4577 -W3 -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 -wd4577 -wd4467 -E D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\data\dummy.cpp 2>NUL >.moc\debug\moc_predefs.h
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\bin\moc.exe -DUNICODE -D_UNICODE -DWIN32 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -DWIN64 -DQT_NO_LINKED_LIST -DQT_NO_JAVA_STYLE_ITERATORS -DQT_DEPRECATED_WARNINGS -DQT_NO_NARROWING_CONVERSIONS_IN_CONNECT -DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_NO_EXCEPTIONS -DQT_PLUGIN -DQT_SQL_LIB -DQT_CORE_LIB -D_WINDLL --compiler-flavor=msvc --include D:/Qt/Qt5.14.2/5.14.2/Src/qtbase/src/plugins/sqldrivers/mysql/.moc/debug/moc_predefs.h -ID:/Qt/Qt5.14.2/5.14.2/msvc2017_64/mkspecs/win32-msvc -ID:/Qt/Qt5.14.2/5.14.2/Src/qtbase/src/plugins/sqldrivers/mysql -I"C:/Program Files/MySQL/MySQL Server 5.7/include" -ID:/Qt/Qt5.14.2/5.14.2/msvc2017_64/include/QtSql/5.14.2 -ID:/Qt/Qt5.14.2/5.14.2/msvc2017_64/include/QtSql/5.14.2/QtSql -ID:/Qt/Qt5.14.2/5.14.2/msvc2017_64/include/QtCore/5.14.2 -ID:/Qt/Qt5.14.2/5.14.2/msvc2017_64/include/QtCore/5.14.2/QtCore -ID:/Qt/Qt5.14.2/5.14.2/msvc2017_64/include -ID:/Qt/Qt5.14.2/5.14.2/msvc2017_64/include/QtSql -ID:/Qt/Qt5.14.2/5.14.2/msvc2017_64/include/QtCore -I"D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\ATLMFC\include" -I"D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include" -I"C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\include\um" -I"D:\Windows Kits\10\include\10.0.17763.0\ucrt" -I"D:\Windows Kits\10\include\10.0.17763.0\shared" -I"D:\Windows Kits\10\include\10.0.17763.0\um" -I"D:\Windows Kits\10\include\10.0.17763.0\winrt" -I"D:\Windows Kits\10\include\10.0.17763.0\cppwinrt" main.cpp -o .moc\debug\main.moc
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\bin\moc.exe -DUNICODE -D_UNICODE -DWIN32 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -DWIN64 -DQT_NO_LINKED_LIST -DQT_NO_JAVA_STYLE_ITERATORS -DQT_DEPRECATED_WARNINGS -DQT_NO_NARROWING_CONVERSIONS_IN_CONNECT -DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_NO_EXCEPTIONS -DQT_PLUGIN -DQT_SQL_LIB -DQT_CORE_LIB -D_WINDLL --compiler-flavor=msvc --include D:/Qt/Qt5.14.2/5.14.2/Src/qtbase/src/plugins/sqldrivers/mysql/.moc/debug/moc_predefs.h -ID:/Qt/Qt5.14.2/5.14.2/msvc2017_64/mkspecs/win32-msvc -ID:/Qt/Qt5.14.2/5.14.2/Src/qtbase/src/plugins/sqldrivers/mysql -I"C:/Program Files/MySQL/MySQL Server 5.7/include" -ID:/Qt/Qt5.14.2/5.14.2/msvc2017_64/include/QtSql/5.14.2 -ID:/Qt/Qt5.14.2/5.14.2/msvc2017_64/include/QtSql/5.14.2/QtSql -ID:/Qt/Qt5.14.2/5.14.2/msvc2017_64/include/QtCore/5.14.2 -ID:/Qt/Qt5.14.2/5.14.2/msvc2017_64/include/QtCore/5.14.2/QtCore -ID:/Qt/Qt5.14.2/5.14.2/msvc2017_64/include -ID:/Qt/Qt5.14.2/5.14.2/msvc2017_64/include/QtSql -ID:/Qt/Qt5.14.2/5.14.2/msvc2017_64/include/QtCore -I"D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\ATLMFC\include" -I"D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include" -I"C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\include\um" -I"D:\Windows Kits\10\include\10.0.17763.0\ucrt" -I"D:\Windows Kits\10\include\10.0.17763.0\shared" -I"D:\Windows Kits\10\include\10.0.17763.0\um" -I"D:\Windows Kits\10\include\10.0.17763.0\winrt" -I"D:\Windows Kits\10\include\10.0.17763.0\cppwinrt" qsql_mysql_p.h -o .moc\debug\moc_qsql_mysql_p.cpp
rc /NOLOGO -D_DEBUG -DUNICODE -D_UNICODE -DWIN32 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -DWIN64 -DQT_NO_LINKED_LIST -DQT_NO_JAVA_STYLE_ITERATORS -DQT_DEPRECATED_WARNINGS -DQT_NO_NARROWING_CONVERSIONS_IN_CONNECT -DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_NO_EXCEPTIONS -DQT_PLUGIN -DQT_SQL_LIB -DQT_CORE_LIB -D_WINDLL -fo .obj\debug\qsqlmysqld_resource.res qsqlmysqld_resource.rc
cl -c -nologo -Zc:wchar_t -FS -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:__cplusplus -Zi -MDd -std:c++17 -utf-8 /wd4530 /wd4577 -W3 -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 -wd4577 -wd4467 /Fd.obj\debug\qsqlmysqld.vc.pdb -DUNICODE -D_UNICODE -DWIN32 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -DWIN64 -DQT_NO_LINKED_LIST -DQT_NO_JAVA_STYLE_ITERATORS -DQT_DEPRECATED_WARNINGS -DQT_NO_NARROWING_CONVERSIONS_IN_CONNECT -DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_NO_EXCEPTIONS -DQT_PLUGIN -DQT_SQL_LIB -DQT_CORE_LIB -D_WINDLL -I. -I"C:\Program Files\MySQL\MySQL Server 5.7\include" -ID:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include\QtSql\5.14.2 -ID:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include\QtSql\5.14.2\QtSql -ID:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include\QtCore\5.14.2 -ID:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include\QtCore\5.14.2\QtCore -ID:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include -ID:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include\QtSql -ID:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include\QtCore -I.moc\debug -IC:\openssl\include -IC:\Utils\my_sql\mysql-5.7.25-winx64\include -IC:\Utils\postgresql\pgsql\include -ID:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\win32-msvc -Fo.obj\debug\ @C:\Users\mxpwa\AppData\Local\Temp\nmC404.tmp
qsql_mysql.cpp
main.cpp
正在生成代码...
cl -c -nologo -Zc:wchar_t -FS -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:__cplusplus -Zi -MDd -std:c++17 -utf-8 /wd4530 /wd4577 -W3 -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 -wd4577 -wd4467 /Fd.obj\debug\qsqlmysqld.vc.pdb -DUNICODE -D_UNICODE -DWIN32 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -DWIN64 -DQT_NO_LINKED_LIST -DQT_NO_JAVA_STYLE_ITERATORS -DQT_DEPRECATED_WARNINGS -DQT_NO_NARROWING_CONVERSIONS_IN_CONNECT -DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_NO_EXCEPTIONS -DQT_PLUGIN -DQT_SQL_LIB -DQT_CORE_LIB -D_WINDLL -I. -I"C:\Program Files\MySQL\MySQL Server 5.7\include" -ID:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include\QtSql\5.14.2 -ID:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include\QtSql\5.14.2\QtSql -ID:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include\QtCore\5.14.2 -ID:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include\QtCore\5.14.2\QtCore -ID:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include -ID:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include\QtSql -ID:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include\QtCore -I.moc\debug -IC:\openssl\include -IC:\Utils\my_sql\mysql-5.7.25-winx64\include -IC:\Utils\postgresql\pgsql\include -ID:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\win32-msvc -Fo.obj\debug\ @C:\Users\mxpwa\AppData\Local\Temp\nmCD8B.tmp
moc_qsql_mysql_p.cpp
link /NOLOGO /DYNAMICBASE /NXCOMPAT /DEBUG /DLL /SUBSYSTEM:WINDOWS /VERSION:5.14 /OUT:..\plugins\sqldrivers\qsqlmysqld.dll @C:\Users\mxpwa\AppData\Local\Temp\nmD1D2.tmp
正在创建库 ..\plugins\sqldrivers\qsqlmysqld.lib 和对象 ..\plugins\sqldrivers\qsqlmysqld.exp
D:\Qt\Qt5.14.2\5.14.2\Src\qtbase\src\plugins\sqldrivers\mysql>
5结果
准备使用
将生成的qsqlmysql.dll、qsqlmysqld.dll拷贝到D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\plugins\sqldrivers目录中。
将MySQL目录(C:\Program Files\MySQL\MySQL Server 5.7\lib)下的 libmysql.dll 拷贝到D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\bin目录中。
32位
MySql下载 https://dev.mysql.com/downloads/mysql/
1.选择下面的下载:
ZIP Archive 5.7.34 352.3M
Download
(mysql-5.7.34-win32.zip)
2. 解压目录的D盘;D:\Program Files\mysql-5.7.34-win32
3. 在D:\Program Files\mysql-5.7.34-win32目录下添加data文件夹,文件夹为空;
在D:\Program Files\mysql-5.7.34-win32目录下添加my.ini文件,文件内容如下;
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
#设置3306端口
port = 3306
# 设置mysql的安装目录
basedir=D:\\Program Files\\mysql-5.7.34-win32
datadir=D:\\Program Files\\mysql-5.7.34-win32\\data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
innodb_flush_method=normal
[client]
#设置3306端口
port = 3306
4. 管理员身份打开cmd,进入mysql目录;执行以下指令:
①mysqld --install,生成mysql实例,打开服务:默认服务是 MYSQL
②mysqld --initialize --user=mysql --console,此时终端显示随机密码,需要记住,后面会使用到:jExTKk
D:\Program Files\mysql-5.7.34-win32\bin>mysqld --initialize --user=mysql --console
2021-05-28T06:45:58.391511Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2021-05-28T06:45:58.648654Z 0 [Warning] InnoDB: New log files created, LSN=45790
2021-05-28T06:45:58.680322Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2021-05-28T06:45:58.754368Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 5c246be9-bf80-11eb-ac0c-5405dbff339a.
2021-05-28T06:45:58.758354Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2021-05-28T06:46:00.767529Z 0 [Warning] CA certificate ca.pem is self signed.
2021-05-28T06:46:01.759448Z 1 [Note] A temporary password is generated for root@localhost: 5CwJ3>jExTKk
③开启mysql的服务(net start mysql)
5. 修改mysql密码:输入命令行mysql -uroot -p,输入临时密码即可登录数据库成功:
6. 修改root密码为123456:
ALTER USER 'root'@'localhost' IDENTIFIED BY '111111';
D:\Program Files\mysql-5.7.34-win32\bin>mysqld --initialize --user=mysql --console
2021-05-28T06:57:37.422704Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2021-05-28T06:57:37.612004Z 0 [Warning] InnoDB: New log files created, LSN=45790
2021-05-28T06:57:37.639414Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2021-05-28T06:57:37.705011Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: fcbfceef-bf81-11eb-aefe-5405dbff339a.
2021-05-28T06:57:37.709513Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2021-05-28T06:57:38.519012Z 0 [Warning] CA certificate ca.pem is self signed.
2021-05-28T06:57:38.675460Z 1 [Note] A temporary password is generated for root@localhost: l1(af*j>*.Sj
D:\Program Files\mysql-5.7.34-win32\bin>mysql -uroot -p
Enter password: ************
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.34
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '111111';
Query OK, 0 rows affected (0.00 sec)
mysql> use mysql;
Database changed
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '111111' WITH GRANT OPTION;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> commit;
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql>
1将qmake所在路径加入环境变量PATH,如D:\Qt\Qt5.14.2\5.14.2\msvc2017\bin
2更改mysql的pro文件
到目录D:\Qt\Qt5.14.2\5.14.2\Src\qtbase\src\plugins\sqldrivers\mysql\mysql.pro
TARGET = qsqlmysql
HEADERS += $$PWD/qsql_mysql_p.h
SOURCES += $$PWD/qsql_mysql.cpp $$PWD/main.cpp
#QMAKE_USE += mysql
INCLUDEPATH+="D:/Program Files/mysql-5.7.34-win32/include"
LIBS+="D:/Program Files/mysql-5.7.34-win32/lib/libmysql.lib"
OTHER_FILES += mysql.json
PLUGIN_CLASS_NAME = QMYSQLDriverPlugin
include(../qsqldriverbase.pri)
Setting up environment for Qt usage...
Remember to call vcvarsall.bat to complete environment setup!
D:\Qt\Qt5.14.2\5.14.2\msvc2017>cd D:\Qt\Qt5.14.2\5.14.2\Src\qtbase\src\plugins\sqldrivers\mysql
D:\Qt\Qt5.14.2\5.14.2\Src\qtbase\src\plugins\sqldrivers\mysql>
最后用VS编译的mysql驱动,加载 mysql.pro 项目,进行编译,即可完成