[转帖]用MySQL Connector C++访问MySql数据库,中文UTF-8乱码的解决_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3549 | 回复: 0   主题: [转帖]用MySQL Connector C++访问MySql数据库,中文UTF-8乱码的解决        下一篇 
jinquan
注册用户
等级:少尉
经验:390
发帖:89
精华:0
注册:2012-3-1
状态:离线
发送短消息息给jinquan 加好友    发送短消息息给jinquan 发消息
发表于: IP:您无权察看 2014-12-24 15:01:36 | [全部帖] [楼主帖] 楼主

直接上代码:

// MySqlTest.cpp : 定义控制台应用程序的入口点。
//
#include <iostream>
using namespace std;
//MySQL Connector C++ 1.0.5,接口跟Oracle的OCCI长的很像(跟JDBC也像),Oracle-MySql官方网站可下载
//D:\Program Files\MySQL\MySQL Connector C++ 1.0.5\include
//D:\Program Files\MySQL\MySQL Connector C++ 1.0.5\lib\opt
#include <mysql_connection.h>
#include <cppconn/statement.h>
#include <cppconn/exception.h>
using namespace sql;
using namespace sql::mysql;
#pragma comment(lib,"mysqlcppconn.lib")
int main(int argc, char* argv[])
{
      try
      {
            //数据库连接
            MySQL_Connection MySqlConn("localhost","root","006355");
            //选择数据库(模式)
            MySqlConn.setSchema("test");
            Statement *pStatement = MySqlConn.createStatement();
            //在Mysql数据库中,我设置的编码是GB2312,但是这里读出的仍是UTF-8编码的字符
            //所以需这句来解决乱码问题
            //执行无记录集返回的语句
            pStatement->execute("set names gb2312");
            //执行有记录集返回的语句
            //注意反引号 "`",呵呵
            ResultSet* pRs=pStatement->executeQuery("Select * from `Users`");
            while (pRs->next())
            {
                  cout<<pRs->getInt("id")<<endl;
                  string sChineseText=pRs->getString(2);
                  cout<<sChineseText<<":";
                  //输出汉字的编码
                  //D5 C5 C8 FD               张三  ANSI/OEM936:GBK/GB2312
                  //E5 BC A0 E4 B8 89    张三  UTF8
                  for (size_t i=0;i<sChineseText.length();i++)
                  {
                        printf("%02X ",(unsigned char)sChineseText[i]);
                  }
                  cout<<endl;
                  cout<<pRs->getString("password")<<endl<<endl;
            }
            pRs->close();
            pStatement->close();
            MySqlConn.close();
      }
      catch (SQLException& ex)
      {
            cout<<"Error:"<<ex.what()<<endl;
      }
      return 0;
}


文档参见:《MySQL 5.5 Reference Manual》21.5. MySQL Connector/C++

可惜的是:

22.5.12.2: Which MySQL Server version(s) is MySQL Connector/C++ compatible with?
MySQL Connector/C++ fully supports MySQL Server version 5.1 and later.


使用低版本MySQL服务器的话,还需MySQL C API。

--转自 北京联动北方科技有限公司




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论