mysql ++中文乱码问题

客官°小女子只卖身不卖艺 2021-10-29 15:52 538阅读 0赞

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

  1. #include <iostream>
  2. #include <mysql++/mysql++.h>
  3. using namespace mysqlpp;
  4. using namespace std ;
  5. int main(){
  6. try{
  7. Connection conn(false);
  8. conn.connect("stock","localhost","root");
  9. Query query=conn.query("select * from stock_pool");
  10. if(StoreQueryResult res =query.store()){
  11. for (auto it = res.begin();it !=res.end();it++){
  12. Row row = *it;
  13. string str =string(row[2].c_str());
  14. cout<<str<<endl;
  15. }
  16. }
  17. }catch (BadQuery er){
  18. cout<<"Error:"<<er.what()<<endl;
  19. return -1;
  20. }catch (const BadConversion &er){
  21. cout << "Conversion error: " << er.what() << endl <<
  22. "\tretrieved data size: " << er.retrieved <<
  23. ", actual size: " << er.actual_size << endl;
  24. return -1;
  25. }catch (const Exception &er){
  26. // Catch-all for any other MySQL++ exceptions
  27. cout << "Error: " << er.what() << endl;
  28. return -1;
  29. }
  30. return 0;
  31. }

689069-20160505200403138-140635139.png

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

  1. show create table stock_pool ;
  2. stock_pool | CREATE TABLE `stock_pool` (
  3. `id` int(11) NOT NULL AUTO_INCREMENT,
  4. `stock_id` varchar(255) NOT NULL,
  5. `stock_name` varchar(255) NOT NULL,
  6. `state` int(11) NOT NULL,
  7. `can_lever` int(11) NOT NULL,
  8. `serial` int(11) NOT NULL,
  9. PRIMARY KEY (`id`)
  10. ) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARSET=utf8 |

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

  1. #include <iostream>
  2. #include <mysql++/mysql++.h>
  3. using namespace mysqlpp;
  4. using namespace std ;
  5. int main(){
  6. try{
  7. Connection conn(false);
  8. conn.set_option(new mysqlpp::SetCharsetNameOption("utf8"));
  9. conn.connect("stock","localhost","root");
  10. Query query=conn.query("select * from stock_pool");
  11. if(StoreQueryResult res =query.store()){
  12. for (auto it = res.begin();it !=res.end();it++){
  13. Row row = *it;
  14. string str =string(row[2].c_str());
  15. cout<<str<<endl;
  16. }
  17. }
  18. }catch (BadQuery er){
  19. cout<<"Error:"<<er.what()<<endl;
  20. return -1;
  21. }catch (const BadConversion &er){
  22. cout << "Conversion error: " << er.what() << endl <<
  23. "\tretrieved data size: " << er.retrieved <<
  24. ", actual size: " << er.actual_size << endl;
  25. return -1;
  26. }catch (const Exception &er){
  27. // Catch-all for any other MySQL++ exceptions
  28. cout << "Error: " << er.what() << endl;
  29. return -1;
  30. }
  31. return 0;
  32. }

  运行输出:

  1. 平安银行
  2. 国农科技
  3. 陕国投A
  4. 宝钛股份
  5. 中航地产

  又可以愉快的玩耍了!

转载于:https://www.cnblogs.com/zhoudayang/p/5463217.html

发表评论

表情:
评论列表 (有 0 条评论,538人围观)

还没有评论,来说两句吧...

相关阅读

    相关 mysql中文问题

    使用mysql过程中,发现了一个老生常谈的问题,中文乱码,在此记录下自己的问题查找及解决方法。   创建数据库语句 create database springd

    相关 Mysql中文

    在使用JDBC连接Mysql数据库,向Mysql数据库插入一条带有中文的记录,在查询的时候,发现全都是?????? ![这里写图片描述][SouthEast] 查询了一些资