我的com组件,现在是用从客户端接收参数,该接口函数参数是(bstr input)类型,现在的问题是:
当参数中含有中文,那么该数据写入到mysql数据库就是乱码。。
我这里的mysql是utf-8的编码,请教高手,如何解决这个问题??马上结贴

解决方案 »

  1.   

    http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=191432
      

  2.   

    BSTR 实际上是 wchar_t*,也就是 UNICODE 字符串。关于这一点的概念,推荐搂主看一篇文章:
    http://www.regexlab.com/zh/encoding.htm如果搂主使用的 "存入数据库" 使用的是 char* 类型的输入数据,
    那么,可以使用 wcstombs 或者 WideCharToMultiBytes() 方法将 wchar_t* 转化成 char[]。另外,根据我使用的情况,应该是 MySQL 的 ODBC 有些问题,我在 Java 中使用 jdbc-odbc 往数据库中存入中文,也会是乱码。
      

  3.   

    我已经结贴了,不过问题没解决,我现在把问题详细的说说,希望再次帮助我一下,谢谢。1)我用的php框架开发的web程序,编码是“zh”,“utf-8”。
    2)我用的mysql数据库编码是“utf8_general_ci”
    3)我用vc的ATL开发的一个com(dll)组件。注册在服务器端。函数如下:
        STDMETHODIMP COperationDB::ConnexionDB(BSTR IHost, BSTR IUser, BSTR IPassword, unsigned short IPort)
        STDMETHODIMP COperationDB::ConnexionDataBases(BSTR DBName)
        STDMETHODIMP COperationDB::ExecuteDB(BSTR ISQL)
       {
                    .......
                       USES_CONVERSION;
    CComBSTR bstr;
    bstr=ISQL;
    //CComBSTR bstr;
    TCHAR buffer[512];
    wsprintf(buffer,_T("%s"),OLE2A(bstr));
    mysql_query(myData,buffer);
    if(mysql_errno(myData)==0)
    {
    wsprintf(szBuffer,_T("操作成功"));
    }
    else
    wsprintf(szBuffer,_T("%ld"),"sql语句错误");
                   }
    4)在php的页面里,调用了该组件来对操作mysql数据库。大致如下:
          $obj=new COM("SynchroData.OperationDB");
       $obj->ConnexionDB("localhost","root","root",3306);//连接数据库服务器
     $obj->ConnexionDataBases("testb");//连接数据库
     $obj->ExecuteDB("insert into  customer (name,pass,phone) values ('迪斯科发','夺魁夫君','a')");//对数据库执行操作这样,当我执行后。看mysql数据库就是这样:
    µÏ˹¿Æ·¢ ¶á¿ý·ò¾ý a     a 
    就这样的乱码
    我用上面地址方法转换还是这样。。
    我不知道哪里错了。。是不是函数类型应该是指针或者是其他原因
    哪个高手能具体说说吗?真的
    非常感谢。。