Qt+MySql開發筆記:Qt5.9.3的msvc2017x64編譯MySql8.0.16版本驅動並Demo連線資料庫

21497936發表於2023-04-26

前言

  mysql驅動版本msvc2015x32版本調好, mysql的mingw32版本的驅動上一個版本編譯並測試好,有些三方庫最低支援vs2017,所以只能使用msvc2017x64,基於Qt5.9.3,於是本篇編譯mysql驅動的msvc2017x64版本,滿足當前的特定需求,這次過程有點費勁,可能是Qt的版本低於Qt5.12,繼續無保留分享出來。
  本篇主要描述Qt5.9.3 msvc2017x64 + mysql8.0.16的驅動編譯過程。

編譯環境

Qt5.9.3 msvc2017x64

  安裝得時候記得要勾選上原始碼

mysql-installer-community-8.0.16.0

   在這裡插入圖片描述

下載資料庫

  
   在這裡插入圖片描述

編譯mysql驅動庫(Qt5.9.3+mysql8.0.16)

步驟一:安裝Qt5.9.3勾選msvc2017x64版本。

   在這裡插入圖片描述
  其他過程略。

步驟二:下載資料庫64位驅動執行程式並解壓

  下載資料庫執行包檔案。(注意:這裡要注意跟目標機器安裝的版本要一致)。
  下載地址: https://dev.mysql.com/downloads/connector/cpp
  (這裡檢視“ 入坑一”)
  直接越過了下載了,因為下載下來的目前編譯都有問題
  資料庫安裝在本地,直接透過本地了:
   在這裡插入圖片描述

步驟三:開啟qt中自帶的mysql原始碼工程

   在這裡插入圖片描述

  使用QtCreator開啟
   在這裡插入圖片描述

  這裡要去掉shadow,否則會其他錯誤,參考“入坑一”和“入坑二”:
   在這裡插入圖片描述

   在這裡插入圖片描述

   在這裡插入圖片描述

步驟四:qmake並且build構建

   在這裡插入圖片描述

   在這裡插入圖片描述

  (這裡要是報錯就回過去看步驟三以及 入坑一二)
   在這裡插入圖片描述

步驟五:替換外掛的mysql庫

   在這裡插入圖片描述

步驟六:將資料庫的libmysql.dll複製到bin目錄

  將mysql的lib下的libmysql.dll複製到qt的msvc2017x64的bin目錄下,而且打包軟體的時候也要帶上。
  這裡是直接將之前lib對應的libmysql.dll複製進qt的bin和應用部署資料夾下:
   在這裡插入圖片描述

  (PS:打包釋出時windeployqt不會主動複製,是需要手動複製過去)

步驟七:編譯應用連線測試

  將應用從odbc切入mysql驅動編譯資料庫的工程:
   在這裡插入圖片描述
  這裡是因為mysql8修改了加密方式,直接使用mysql驅動的話要修改加密方式,修改方式主要是部署資料庫的時候修改,可以登入資料庫然後做如下操作:
   在這裡插入圖片描述

  然後應用登入測試
   在這裡插入圖片描述

  若還需要遠端登入,則繼續步驟八和九:

步驟八:配置資料庫賬號允許遠端操作(這一步是之前mingw32的測試步驟,為了方便直接放這)

  這是因為賬號不被允許遠端登入,所以需要修改資料庫使用者的配置,讓其允許遠端登入。
  修改使用者被允許遠端登入,先使用mysql控制端輸入密碼登入,然後操
作:

use mysql;select host,host from user;update user set host = ‘%’ where user = ‘root’;select host,host from user;

  這時候,還是不行,需要強行重新整理以下

flush privileges;

   在這裡插入圖片描述
   在這裡插入圖片描述

  然後成功:
   在這裡插入圖片描述
  至此,Qt5.9.3 msvc2017x64 + mysql8.0.16資料庫連線驅動編譯完成。

步驟九:資料庫的遠端操作工具連線(這一步是之前mingw32的測試步驟,為了方便直接放這)

  使用遠端工具測試,發現出錯:
   在這裡插入圖片描述
  這是因為8.0之後mysql更改了密碼的加密規則,目前的客戶端連線軟體還不支援Mysql8新增加的加密方式caching_sha2_password,所以需要修改使用者的加密方式,將其改回舊加密驗證方式。
  先登入mysql命令列,執行以下,主要是youPassword要替換為你使用遠端登入的賬戶密碼:

alter user 'root'@'%' identified by 'youPassword' password expire never;alter user root identified with mysql_native_password by 'youPassword';flush privileges;

   在這裡插入圖片描述

   在這裡插入圖片描述

入坑

入坑一:編譯報錯無法開啟“無法開啟輸入檔案“D:\mysql-connector-c-6.1.11-winx64\lib.ob”

問題

  編譯錯誤,無法透過
   在這裡插入圖片描述

嘗試解決

  多方查詢,定位在提供的庫的版本上,也不行。
  本次版本,最後嘗試直接從mysql安裝資料夾裡面拿,可以透過,但是也沒有看到根錄下檔案(後來檢查路徑才確認未生成到根目錄下)。
  以下截圖過程可參考:
   在這裡插入圖片描述

   在這裡插入圖片描述

   在這裡插入圖片描述
  然後去掉shadow,成功了:
   在這裡插入圖片描述

解決

  去掉shaodw,路徑檢視“ 入坑二”。

入坑二:沒有編譯輸出

問題

  按照之前mingw32編譯的沒找到輸出

原因

  有些配置檔案,所以直接全部構建,來看生成的資料夾
   在這裡插入圖片描述

  發現是路徑問題。

解決

  找到到對應的路徑,生成了。
   在這裡插入圖片描述
  綜合一和二,還有嘗試下載驅動庫的編譯器vc版本問題,這裡解決差不多花了大半天了去嘗試、摸索然後逐步排除各種問題。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70010283/viewspace-2948927/,如需轉載,請註明出處,否則將追究法律責任。

相關文章