• mysql ++中文乱码问题


      使用mysql++读取mysql数据库,数据表中字符集为utf8,但是读取的时候中文字符串不能够正常显示。下面是测试程序:

    #include <iostream>
    #include <mysql++/mysql++.h>
    using namespace mysqlpp;
    using namespace std ;
    int main(){
        try{
            Connection conn(false);
            conn.connect("stock","localhost","root");
            Query query=conn.query("select * from stock_pool");
            if(StoreQueryResult res =query.store()){
                for (auto it = res.begin();it !=res.end();it++){
                    Row row = *it;
                    string str =string(row[2].c_str());
                    cout<<str<<endl;
                }
    
            }
        }catch (BadQuery er){
            cout<<"Error:"<<er.what()<<endl;
            return -1;
        }catch (const BadConversion &er){
            cout << "Conversion error: " << er.what() << endl <<
            "	retrieved data size: " << er.retrieved <<
            ", actual size: " << er.actual_size << endl;
            return -1;
        }catch (const Exception &er){
            // Catch-all for any other MySQL++ exceptions
            cout << "Error: " << er.what() << endl;
            return -1;
        }
        return 0;
    }

      可见输出有问题,但是我们的数据表字符集设置没有问题。输出创建数据表的sql语句。

    show create table stock_pool ;
    
    stock_pool | CREATE TABLE `stock_pool` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `stock_id` varchar(255) NOT NULL,
      `stock_name` varchar(255) NOT NULL,
      `state` int(11) NOT NULL,
      `can_lever` int(11) NOT NULL,
      `serial` int(11) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARSET=utf8 |

      解决方案很简单,设置mysql连接参数,设置字符集为utf8,如下所示:

    #include <iostream>
    #include <mysql++/mysql++.h>
    using namespace mysqlpp;
    using namespace std ;
    int main(){
        try{
            Connection conn(false);
            conn.set_option(new mysqlpp::SetCharsetNameOption("utf8"));
            conn.connect("stock","localhost","root");
            Query query=conn.query("select * from stock_pool");
            if(StoreQueryResult res =query.store()){
                for (auto it = res.begin();it !=res.end();it++){
                    Row row = *it;
                    string str =string(row[2].c_str());
                    cout<<str<<endl;
                }
    
            }
        }catch (BadQuery er){
            cout<<"Error:"<<er.what()<<endl;
            return -1;
        }catch (const BadConversion &er){
            cout << "Conversion error: " << er.what() << endl <<
            "	retrieved data size: " << er.retrieved <<
            ", actual size: " << er.actual_size << endl;
            return -1;
        }catch (const Exception &er){
            // Catch-all for any other MySQL++ exceptions
            cout << "Error: " << er.what() << endl;
            return -1;
        }
        return 0;
    }

      运行输出:

    平安银行
    国农科技
    陕国投A
    宝钛股份
    中航地产

      又可以愉快的玩耍了!

  • 相关阅读:
    P2617 Dynamic Rankings 动态主席树
    P4338 [ZJOI2018]历史 LCT+树形DP
    P3348 [ZJOI2016]大森林
    P3613 睡觉困难综合征 LCT+贪心+位运算
    SP16549 QTREE6
    P3703 [SDOI2017]树点涂色 LCT维护颜色+线段树维护dfs序+倍增LCA
    U19464 山村游历(Wander) LCT维护子树大小
    P4219 [BJOI2014]大融合 LCT维护子树大小
    P2542 [AHOI2005]航线规划 LCT维护双连通分量
    P3950 部落冲突
  • 原文地址:https://www.cnblogs.com/zhoudayang/p/5463217.html
Copyright © 2020-2023  润新知