自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

詳解QT 中連接Mysql 亂碼解決方法

移動(dòng)開發(fā)
本文介紹的是詳解QT 中連接Mysql 亂碼解決方法,對(duì)于亂碼的解決方法一般就是編碼出錯(cuò),先來看本文內(nèi)容。

QT 中連接Mysql 亂碼解決方法是本文介紹的內(nèi)容,QT連接mysql之后出現(xiàn)亂碼MySQL4.1及其以上版本中中文問題比較麻煩,有時(shí)候在QT中使用會(huì)出現(xiàn)問號(hào)或者亂碼,現(xiàn)在說明一下在Qt中如何正確地配合使用。

先在MySQL中建表,使用中文,一般情況下就兩種,GB(GB2312或者GBK)或者UTF8兩種。兩種的解決方法是相似的,這里我們以GBK為例說明。

一、數(shù)據(jù)庫(kù)和表以及表里的字符相關(guān)字段(varchar, char, text等)都要使用gbk_chinese_ci這種方式,不這樣做也可以,但這樣做,會(huì)省很多麻煩。

二、重新編譯Qt的MySQL驅(qū)動(dòng),需要修改src/sql/drivers/mysql/qsql_mysql.cpp文件。要修改的部分如下:***百零八行的codec函數(shù),注意紅色加粗部分,是我修改增加的語(yǔ)句。

  1. tatic QTextCodec* codec(MYSQL* mysql)   
  2. {   
  3. return QTextCodec::codecForName("GBK");   
  4. #if MYSQL_VERSION_ID >= 32321   
  5. QTextCodec* heuristicCodec = QTextCodec::codecForName(mysql_character_set_name(mysql));   
  6. if (heuristicCodec)   
  7. return heuristicCodec;   
  8. #endif   
  9. return QTextCodec::codecForLocale();   
  10. }  

然后,重新編譯qt的mysql驅(qū)動(dòng),這里就不多說了,請(qǐng)查看Qt相關(guān)文檔

三、在Qt程序main函數(shù)中app后面開頭處加入下面兩句,加上這兩個(gè)是省得不必要的麻煩。

  1. QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));   
  2. QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));   
  3. //QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));  

四、在Qt數(shù)據(jù)庫(kù)連接后,運(yùn)行SET NAMES 'GBK'語(yǔ)句(紅色部分)。

  1. db = QSqlDatabase::addDatabase("QMYSQL");   
  2. db.setHostName("localhost");   
  3. db.setDatabaseName("yourdatabase");   
  4. db.setUserName("yourusername");   
  5. db.setPassword("yourpassword");   
  6. db.open();   
  7. db.exec("SET NAMES 'GBK'");  

OK, 走過上面四步以后,我們就可以在程序中正確使用查看MySQL中的中文數(shù)據(jù)了。

但是如果你要直接通過SQL語(yǔ)句修改數(shù)據(jù),則需要正確的把輸入的內(nèi)容轉(zhuǎn)變?yōu)镚B碼中,比如:

  1. QTextCodec *codec = QTextCodec::codecForName("GBK");   
  2. QString strOut = codec->fromUnicode(lineEdit->text()).data();   
  3. QString strSql = "UPDATE user SET uinfo = '" + strOut + "'";   
  4. db.exec(strSql);  

值得注意的是,如果在第三步中把第三行的codecForTr的注釋去掉,則就不用上面的字符串格式轉(zhuǎn)換了。

這里面最關(guān)鍵的一點(diǎn)就是修改qsql_mysql.cpp文件,因?yàn)樗荒苷_的設(shè)置codec內(nèi)碼。

如果數(shù)據(jù)庫(kù)中的編碼使用的是UTF8,則把上面相關(guān)的部分改為UTF-8(Qt)或者UTF8(MySQL)就行了。

小結(jié):關(guān)于詳解QT 中連接Mysql 亂碼解決方法的內(nèi)容介紹完了,更多Mysql的內(nèi)容,請(qǐng)參考編輯推薦,***希望本文對(duì)你有所幫助!

責(zé)任編輯:zhaolei 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2010-10-13 17:22:12

MySQL查詢亂碼

2009-07-02 13:32:56

JSP中文亂碼

2010-07-15 14:01:12

telnet亂碼

2009-07-01 18:14:36

JSP亂碼

2010-02-26 15:53:35

WCF套接字連接中斷

2011-07-04 10:09:19

Qt Creator BUG

2011-06-24 10:54:34

Qt Mysql

2010-11-23 10:11:23

mysql建表亂碼

2011-03-01 15:38:44

Fireftp亂碼

2009-06-25 15:06:20

Javadoc亂碼

2017-06-14 22:11:57

數(shù)據(jù)庫(kù)MySQL死鎖

2011-03-18 18:47:34

QtMySQL

2009-12-02 10:08:33

PHP mail()函

2009-11-26 15:42:18

PHP函數(shù)mail()

2009-12-02 16:53:25

PHP發(fā)送郵件亂碼

2012-03-21 10:16:31

JavaJSP

2010-11-16 16:07:32

oracle用戶連接

2010-08-12 09:30:08

Flex內(nèi)存泄露

2010-02-24 16:30:52

WCF常見錯(cuò)誤

2010-10-19 10:25:29

SQL Server連
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)