mysql的汉字编码问题已经有很多人遇到过,但我的情况比较特殊,网上找到的几乎所有的帖子都不行,只好在这里请教大家了。我的mysql版本为5.1,分别安装在windows和linux下两个系统下进行测试,最终结果都一样。
把建立的库、表,varchar字段的默认字符集全部设置为utf-8. 连接的默认字符集也设置为utf-8。
show variables like "char%";
"character_set_client","utf8"
"character_set_connection","utf8"
"character_set_database","utf8"
"character_set_filesystem","binary"
"character_set_results","utf8"
"character_set_server","latin1"
"character_set_system","utf8"
"character_sets_dir","C:\\Program Files\\MySQL\\MySQL Server 5.1\\share\\charsets\\"客户端程序在windows下为了能够连接mysql,安装了mysql-connector-odbc5.1.5。
现在使用ado操作建立的表,使用中文gb2312,读取都没有问题。但是,在linux下编写的程序,直接使用mysql的sdk,依然写gb2312编码的汉字到数据库,程序提示成功,但相应字段中实际上没有任何汉字,也读取不到任何内容。请问如何解决?

解决方案 »

  1.   

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

  2.   


    select hex(col) from table where id=3 看一下是没内容NULL,还是有内容没显示?
      

  3.   

    select hex(col) from table where id=3
    显示的内容为 00
      

  4.   

    linux下的测试代码:
    [root@localhost ~]# cat test.c
    #include <mysql.h>
    #include <stdio.h>
    int main(){
       MYSQL mysql;     // need a instance to init
       MYSQL_RES *res;
       MYSQL_ROW row;
       char *query;
       int t,r;
       mysql_init(&mysql);
       if (!mysql_real_connect(&mysql,"localhost", "omc", "omc888", "test",0,NULL,0))
       {
           printf( "Error connecting to database: %s\n",mysql_error(&mysql));
       }
       else printf("Connected...\n");
     // execute the insert query
     query = "insert into T values(102, '";
     char s[14]={0},ss[100];
     //gb2312,汉字:啊
     s[0]=0xb0;
     s[1]=0xa1;
     strcpy (ss,query);
     strcat (ss,s);
     strcat (ss,"')");
     printf("%s\n",ss);
     t = mysql_real_query(&mysql,query,(unsigned int) strlen(ss));
     if (t)
     {
        printf("Error making query: %s\n",
          mysql_error(&mysql));
     }
     else printf("[%s] made...\n", ss);
     sleep(1);
     mysql_close(&mysql); return 0;
    }
      

  5.   

    看来你没有看一楼的贴子啊。s[0]=0xb0;
    s[1]=0xa1;b0a1 是啊?还是 数字 45217 ? 还是GBK编码中的字符? 你在哪说明了呢?想一下这个问题
    long   是什么? 长? 龙? 
      

  6.   

    query = "insert into T values(102, '"; 
    char s[14]={0},ss[100]; 
    //gb2312,汉字:啊 
    s[0]=0xb0; 
    s[1]=0xa1; 
    strcpy (ss,query); 
    strcat (ss,s); 
    strcat (ss,"')"); 
    printf("%s\n",ss); ss串就是"insert into T values(102, '啊')"
    是不是可以当作SQL语句,直接执行?
      

  7.   

    可以。 
    但你应该知道  
    insert into T values(102, '啊')
    对计算机来说其实  啊 就 是 b0a1 ,但 b0a1 未必是 啊。
    你可以看完一楼的贴子然后再问吗?set names 'gb2312';