前段时间开发数据库几个模块一直预留着一个数据库内和程序界面上中文乱码的问题未解决,以前做asp.net、JSP,J2EE、C#时候知道,数据库中文乱码一般都是编码问题导致的,问题不大,只需要数据库客户端和服务端的编码一直就可以了。
项目的开发环境是VS2008+Qt4.7+Win7 数据库管理软件为Navicate 8 for Mysql。
出现的问题如下,界面中读取数据库中文数据乱码:
解决方法实际上是参考了网上的例子:【转】QT中使用MYSQL中文乱码解决方法
----------------------------------------------------------------------
真正的解决过程如下:
1、数据库、数据表、数据项编码全部更改为GB2312/GBK
2、修改Qt驱动代码,重新编译Qt Mysql5.5驱动,实现更改QtextCode
3、修改项目全局编码格式。
--------------------------------------------------------------------------------
详细过程如下:
步骤1数据库、数据表、数据项编码全部更改为GB2312/GBK截图
步骤2修改Qt驱动代码,重新编译Qt Mysql5.5驱动,实现更改QtextCode截图:
步骤3、修改Qt全局字符编码:
// 以下部分解决中文乱码
QTextCodec *codec = QTextCodec::codecForName("GBK");
QTextCodec::setCodecForTr(codec);
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForCStrings(codec);
// 以上部分解决中文乱码
最终结果成功如下:
Navicate中的数据:
程序界面中的数据截图:
注意:
注(1)貌似在Qt连接数据库的时候修改编码,并没有多大作用。
/**
*函数介绍:创建数据库连接
*输入参数:
*返回值:无
*/
bool DataAccess::createConnection()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("10.3.2.84"); //数据库服务器
db.setDatabaseName("petct"); //数据库名
db.setUserName("admin"); //登录名
db.setPassword("admin"); //密码
if(!db.open ())
{
QMessageBox::warning (0, "Warning", "Failed to open database!");
return false;
}
//不用设置
//db.exec("SET NAMES 'GBK'");
//
return true;
}
注(2)、貌似在第二步中重新编译Qt-mysql的驱动也没多大用。至少我后期反复试验后只进行了上述两步就解决了乱码问题。我在另外一个笔记本上也专门测试过增删改查,中文一切正常