• 13294阅读
  • 13回复

[提问]Qt3 在 MySQL 数据库中不能存储汉字! [复制链接]

上一主题 下一主题
离线sflute
 
只看楼主 倒序阅读 楼主  发表于: 2007-03-22
— 本帖被 XChinux 从 Qt基础编程 移动到本区(2013-04-01) —
我用的是VC6.0+Qt3在Windows下开发,用的数据库是MySQL,我用程序在MySQL数据库中插入新的记录,如果数据中有汉字,插入后在数据库中只看到一串问号,请问如何解决呢?
离线XChinux

只看该作者 1楼 发表于: 2007-03-22
连接上数据库后,执行
SET NAMES 'gbk';
这条SQL语句。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线sflute
只看该作者 2楼 发表于: 2007-03-23
还是不行。我想不是MySQL的问题,已经存储在MySQL中的汉字数据我可以用Qt取过来,但是用Qt写入汉字数据就不行了。
离线sflute
只看该作者 3楼 发表于: 2007-03-28
搞不定了,请求支援...
离线minifat

只看该作者 4楼 发表于: 2007-03-28
app.setDefaultCodec( QTextCodec::codecForName("GBK") );
string strcmd = string( "insert into CDB_AREAS(ID,valid,Area_No,Area_Name) values(1,1,1,'全网')" );
QSqlQuery qret = m_pSqlDatabase->exec( strcmd.c_str() );
离线sflute
只看该作者 5楼 发表于: 2007-03-28
我发现原因了,是MySQL数据库采用了UTF-8编码。我应该如何做呢?
离线minifat

只看该作者 6楼 发表于: 2007-03-28
mysql进去,status显示的结果贴一下?
离线sflute
只看该作者 7楼 发表于: 2007-04-04
对不起,应该如何操作呢?我对MySQL不是太了解。
离线hehui

只看该作者 8楼 发表于: 2007-04-11
我用的时候可以,但是得用SQL语言!
表名不能用汉字!
不知为何!
离线XChinux

只看该作者 9楼 发表于: 2007-04-11
连接上MySQL后执行set names 'gbk' 或者set names 'utf8',依据你自己的程序中的内码而定
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线slient
只看该作者 10楼 发表于: 2007-05-14
使用set names 'utf8' 与set names 'gbk'
都不行,楼主帮帮忙
离线slient
只看该作者 11楼 发表于: 2007-05-14
使用set names 'utf8' 与set names 'gbk'
都不行,楼主帮帮忙
离线netboy168

只看该作者 12楼 发表于: 2008-07-30
见我的回复贴,数据库设置为GBK,测试例子是楼主的例子,祝好运
http://www.qtcn.org/bbs/read.php?tid=8188&keyword=mysql
离线solin
只看该作者 13楼 发表于: 2010-02-11
彻底解决数据库存储中文和Qt程序显示数据库中文及中文字符串的问题
(1)数据库和表以及表里的字符相关字段(varchar, char, text等)都要使用gbk_chinese_ci这种方式,不这样做也可以,但这样做,会省很多麻烦。
(2)重新编译Qt的MySQL驱动,需要修改src / sql / drivers / mysql / qsql_mysql.cpp文件。要修改的部分如下:第一百零八行的codec函数  

static QTextCodec* codec(MYSQL* mysql)
{
   return QTextCodec::codecForName("GBK");//增加部分

#if MYSQL_VERSION_ID >= 32321
  QTextCodec* heuristicCodec = QTextCodec :: codecForName ( mysql_character_set_name ( mysql ) );
    if (heuristicCodec)
      return heuristicCodec;
#endif
   return QTextCodec::codecForLocale();
}




(3)然后,重新编译qt的mysql驱动在Qt程序main函数中app后面开头处加入下面三句,加上这三个是省得不必要的麻烦  

QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));




(4)在Qt数据库连接后,运行"SET NAMES 'UTF8'"语句或"SET NAMES 'GBK'"。  

db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setDatabaseName("yourdatabase");
db.setUserName("yourusername");
db.setPassword("yourpassword");
db.open();
db.exec("SET NAMES 'UTF8'");




经过以上四步,就可以在Qt程序中直接使用中文字符串,而且可以直接使用中文字符串出入于程序和数据库之间
快速回复
限100 字节
 
上一个 下一个