QT與SQL(二) 資料庫中文資訊讀取亂碼

2021-09-29 22:45:22 字數 1641 閱讀 8535

最近,在使用qt的qodbc進行sql 2008 r2資料庫的通訊連線時,遇到了乙個問題,這裡就將該問題進行一下記錄。

訪問microsoft sql server 2008r2資料庫內的一張資料表,表中資訊除了數字之外,還有一部分中文資訊,中文資訊的資料型別設定為nvchar(50),在資料庫中的儲存情況如下:

嘗試對該資訊進行讀取,讀取**如下:

qdebug()<

qsqldatabase db = qsqldatabase::adddatabase("qodbc");

qsqlquery *query=new qsqlquery(db);

db.sethostname("192.168.1.1");

db.setdatabasename(qstring("driver=;server=%1;database=%2").arg("192.168.1.1").arg("test"));

db.setusername("account");

db.setpassword("password");

db.open();

if(db.isopen())

else qdebug()<

使用上述**讀取資料庫,通訊成功,但是讀出的中文資訊卻是亂碼。

對上述**進行分析,qt正常顯示中文字元(由提示輸出資訊可以看出),則問題出在qt對sql資料庫中文資訊的解碼上,但是nvchar對應unicode編碼集,而qt也已設定了utf-8編碼,故問題較難處理。

之前已編寫過類似功能,中文字元無亂碼現象,將今次**與之前**比較,發現有一不同之處,根據不同修改已有**:

qdebug()<

qsqldatabase db = qsqldatabase::adddatabase("qodbc");

qsqlquery *query=new qsqlquery(db);

db.sethostname("192.168.1.1");

db.setdatabasename(qstring("driver=;server=%1;database=%2").arg("192.168.1.1").arg("test"));

db.setusername("account");

db.setpassword("password");

db.open();

if(db.isopen())

else qdebug()<

只是在query執行查詢指令之前,新增query的清除指令,即query->clear(),中文字元的讀取即恢復正常,如下:

qt對該函式的解釋如下:

清除結果集,並釋放其持有的資源。設定query狀態為不活躍狀態。如非必要,不應使用該函式。

從qt的說明上,無法看出其與中文字元有什麼關聯,希望有高手可以予以說明。

mysql資料庫裡中文資訊顯示亂碼終結篇

前段時間因專案需要,客戶要用asp mysql資料庫,mysql資料庫中的部分資訊是oa中的內容,原oa是php mysql,因是第一次採用asp mysql,所以碰到乙個頭痛的問題 有乙個表中的字段是varchar 50 儲存的是中文內容,我用php讀取該欄位內容,顯示正常 我用asp讀取該欄位,...

Qt鏈結資料庫與使用SQL

一直沒接觸資料庫,前一陣突然有機會用了用mysql,順手把sql語法學了一遍,學完了手癢癢,一想qt可以 結合資料庫,就順便試了下qt鏈結資料庫與使用sql sql部分就不說了 qt先說鏈結部分 1.先做資料庫驅動,現在qt sdk for windows裡面已經有odbc的驅動了,我當時現做了個m...

QT與SQL 資料庫的連線

軟體版本 qt5.5.1 microsoft sql server 2008 r2 1,在.pro檔案中新增 qt sql2,在對應的.件或.cpp檔案中新增引用 include3,進行連線配置,共有兩種方法 1 直接使用sql相關語句 qodbc為qt中與sql相對應的設定字元,其他種類的資料庫也...