在Linux上用C++写的命令行程序,使用了sqlite3数据库,移植到Windows里中文出现乱码

在Linux下用C++写的命令行程序,使用了sqlite3数据库,移植到Windows里中文出现乱码。
我之前在Linux里用C++写了个记账程序给自己用,是命令行程序,用了sqlite3数据库,用了近一年,没啥大问题。最近我开始用Windows7了(没办法,新买了笔记本电脑,驱动有问题,用Linux老是突然没反应,只能强行关机),我把程序移植到Windows下,用的编译器是mingw32,IDE是codeblocks。开始的时候程序的界面里的中文是乱码,后来发现源代码的编码是utf-8,我在codeblocks里用edit->file encoding里设置为system default选项,再编译,运行,界面的乱码就没啦。但是在运行程序的时候发现之前存到sqlite3数据库里的数据只要含中文的显示出来全是乱码,而如果全是数字则显示正常。请问是要改变数据库文件的编码还是要在C++程序里自己转换编码啊?搜了一下在C++里转换字符串编码的程序,感觉好麻烦啊。谢谢啦!
以下是我觉得可能相关的一些代码片段:
这是执行SQL查询的代码:
C/C++ code

bool DataBase::runSQL(const string & querySQL,
        QueryResult & res)
{
    //如果还没打开就查询,会报错。
    if (!bOpen)
    {
        if (!openDataBase())
        {
            return false;
        }
    }
    int rc = sqlite3_get_table(db, querySQL.c_str(), &res.result, &res.row,
             &res.col, &errMsg);
    if (rc != 0)
    {
        return false;
    }

    if (!closeDataBase())
    {
        return false;
    }
    return true;
}


这是输出查询结果的函数
C/C++ code

//工具函数,输出记录的查询结果,which=1为收入支出记录,which=2为资产负债记录
void outputResult(const string & sql, const int which)
{
    DataBase incomeData;
    QueryResult res;
    if (!incomeData.runSQL(sql, res))
    {
        cout<<"查询失败!按任意键继续......";
        cin.get();
        cin.get();
        return;
    }
    cout<<"查询结果为:"<<endl;
    int t = 0;
    int index = 0;
    for (int i = res.col; i < (res.row+1)*res.col; i++)
    {
        t++;
        if (t == 1)
        {
            index++;
            cout<<"第"<<index<<"项:";
            cout<<"项目ID=";
        }
        else if (t == 2)
        {
            cout<<"项目日期=";
        }
        else if (t == 3)
        {
            cout<<"项目名称=";
        }
        else if (t == 4)
        {
            cout<<"项目金额=";
        }
        else if (t == 5)
        {
            //根据类型ID查找类型名称
            QueryResult TypeName;
            string querysql;
            if (which == 1)
            {
                querysql = "SELECT TypeName FROM IncomeType WHERE TypeID = ";
            }
            else if (which == 2)
            {
                querysql = "SELECT TypeName FROM InvestmentType WHERE TypeID = ";
            }
                        //以下的输出是乱码
            querysql += res.result[i];
            querysql += ";";
            incomeData.runSQL(querysql, TypeName);
                        //以下的输出是乱码
            cout<<"项目类型="<<TypeName.result[1]<<";";
        }
        else if (t == 6)
        {
            cout<<"备注=";
        }
        if (t != 5)
        {
                        //以下输出是乱码
            cout<<res.result[i]<<";";
        }
        if (t == 6)
        {
            t = 0;
            cout<<endl;
        }
    }
    cout<<"共有"<<index<<"项结果"<<endl;
    cout<<"查询结束,按任意键继续......";
    cin.get();
    cin.get();
}


另外完整的代码我早已经放到github上了,地址: https://github.com/zwdnet/Money
谢谢大家!

------解决方案--------------------
可以肯定的是不需要改变sqlite3数据库里的数据的编码,乱码问题集中在C++这边进行。默认情况下sqlite3中用的是UTF-8编码,而Windows系统是本地编码,比如GBK等。
------解决方案--------------------
可以肯定的是不需要改变sqlite3数据库里的数据的编码,乱码问题集中在C++这边进行。默认情况下sqlite3中用的是UTF-8编码,而Windows系统是本地编码,比如GBK等。