mysql数据库安装时选的utf8编码,在VS2005下用C*api向表中插入中文字符,数据库显示的是乱码(插入的数据应该是gb2312码因为vs2005的代码页配置的是gb2312),有几个转换函数也用了,如:MultiByteToWideChar主要是搞不清楚在什么代码页下,如何将当前编码转换为需要的编码,有没有做过类似功能的朋友推荐个方案,是否与代码页有关系,还是直接用编码转换函数,是否现将gb2312转为uniqueCode编码,再将uniqueCode转为utf-8编码,是否要在连接mysql数据库时,在程序代码处设置mysql的编码,编码不一致到底和那些有关系??????????????????????

解决方案 »

  1.   

    set names 'utf8';http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/12/4174186.aspx
    MySQL 中文显示乱码
      

  2.   

    虽然你的代码页默认是cp936(gb2312),但是mysql api并不认这个。
    你需要在你获取连接之后,立即执行sql语句:set names 'gbk'
    这样,在这之后的sql: CRUD操作,都会得到正确的中文显示、输入与输出。
      

  3.   

    你们还没有弄明白我的意思,其实是这样的:
    数据库中设置的是utf8码,但是程序变量的是unicode码
    所以当插入一个unicode码到数据库中,肯定是乱码,在数据库
    连接时设置utf8码的话,可以将任何变量(不管是什么编码)
    转换为utf8码之后,再insert到表中??
      

  4.   

    连接时设置的如果是utf8编码,那就需要将你的unicode编码的变量转为utf8编码再绑定或者传输。
    取结果时,还需要将得到的utf8编码值转换为unicode进行显示。
    就这样子。
      

  5.   

    C++ 中不清楚,但C#中我是这样转的。System.Text.Encoding.GetEncoding("gb2312").GetString(System.Text.Encoding.GetEncoding("iso-8859-1").GetBytes(row[1].ToString()))
      

  6.   

    MYSQL * mysql; //数据库连接句柄
     CString sql;
     if(mysql=mysql_init((MYSQL*)0)){}else{return 0;} 
      if(mysql_real_connect(mysql, "127.0.0.1", "root", "123456",
      "evaluateweb_int_flyoadb", 3306, NULL, 0))
     {}else{AfxMessageBox("连接失败");}
     
     if(mysql_set_character_set(mysql,"utf8")){AfxMessageBox("utf8设置不成功!");return 0;}
     
     int num;
     MYSQL_RES * res ;
     MYSQL_FIELD * fd ;
     MYSQL_ROW row ; CString usqlA ="insert into t_evaluateinfo (SATISFACTION, EMP_NAME, NETADDR_NAME,DDTT, NETADDR_NO, DESCC) values('";
     
     CString usqlB = empEval+"','"+empName+"','"+wdNameTemp+"','"+ddtt+"','"+wdNo+"','descc')";
     CString insertMysql = usqlA+usqlB;
       
      if ( !mysql_query(mysql,insertMysql ))  {
      int a =0  ; a +=a;
     }
     else{   }
    ====================================================
    在这里贴出我的代码,
    在VS2005下代码页环境是gb2312,CString的默认编码不知道是什么
    假如我定义了一个CStirng str="中国";把str插入到数据库的表中,
    网上有将gb2312转utf8的,还有将unicode转utf8的函数,有文章说
    上面的那个str应该和代码页的编码相同,那如果是通过socket接收来
    的buf呢,应该是什么编码呢,怎样转换呢
    另:
    这一句是我后来加上去的,
     if(mysql_set_character_set(mysql,"utf8"))
    {AfxMessageBox("utf8设置不成功!");return 0;}
    程序编码设置成功,但insert不了数据,并且没有报任何错误;
    如果注释掉这行,程序就能insert数据,但还是乱码,乱码文如下:
    =============================================================
    INSERT INTO `t_evaluateinfo` (`ID`, `SATISFACTION`, `EMP_NAME`, `NETADDR_NAME`, `DDTT`, `NETADDR_NO`, `DESCC`) VALUES  
      (1,'满意','小沈阳','南山蛇口营业厅','2010-01-02 08:44:23','wd456','fd'),//这个是手动输入的
      (43,'fd',NULL,NULL,NULL,NULL,NULL),
      (44,'fd',NULL,NULL,NULL,NULL,NULL),
      (45,'ÂúÒâ',NULL,NULL,NULL,NULL,NULL),
      (50,'ÂúÒâ',NULL,NULL,NULL,NULL,NULL),
      (51,'ÂúÒâ','СÉòÑô','ÄÏɽÉß¿ÚÓªÒµÌü','2010-01-02 08:44:23','wd456','fd'),
      (54,'·Ç³£ÂúÒâ','³ÉÁú','ÂÞºþÁ«ÌÁÓªÒµÌü','2010-06-24 15:50:36','wd123','descc'),
    =====================================================================================================
    还是编码的问题,因为我在网上找了个连接mysql的工具,后面几行不能正常显示的中文字符
    却能正常显示,第一行数据却不能正常的显示;
    就是编码设置问题,就是找不到原因所在
      

  7.   

    按下贴中的检查方法,贴出你的检查结果。http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/12/4174186.aspx
    MySQL 中文显示乱码
      

  8.   

    if(mysql_set_character_set(mysql,"utf8"))
    {AfxMessageBox("utf8设置不成功!");return 0;}
    ===============================================
    你说加了上面这句,就insert不了数据,要不你测试下insert英文字符看看,
    看看能不能添加数据,
      

  9.   

    先清除以前的乱码历史数据。
    你这里的CString变量,哪里有什么unicode字符串?(unicode串,至少是以_T宏或者TEXT宏作前缀的吧)
    全是本地的MBS串。
    既然是本地串,你没有必要设置encoding为'utf8',而是要设置为'gbk'
    mysql_set_character_set(mysql,"gbk")
    在这之后,使用程序insert的中文,在同样设置为'gbk'的程序下,取出来的肯定是中文的MBS串,如果界面显示要求使用unicode字符串,将这些MBS串转化成unicode串就行了。至于socket传输,如果是文本,传过来的无非还是文本,原来是什么编码,还是什么编码,但你自己需要知道原来的编码。
      

  10.   

    非常的感谢iihero,原来是要设置gbk,结贴了,分全部给你了朋友在哪里上班,我在深圳