免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3640 | 回复: 3

linux c下mysql取中文乱码,需要DX帮忙 [复制链接]

论坛徽章:
0
发表于 2010-09-16 11:03 |显示全部楼层
本帖最后由 ibmxp 于 2010-09-16 11:36 编辑

数据库字符集设置情况如下:
mysql>show variables like 'character_set_%';

+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | gbk                        |
| character_set_connection | gbk                        |
| character_set_database   | gbk                        |
| character_set_filesystem | binary                     |
| character_set_results    | gbk                        |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

数据库字符集设置情况如下:
>mysql status;
mysql  Ver 14.14 Distrib 5.1.50, for pc-linux-gnu (i686) using readline 5.1

Connection id:          34
Current database:       testdb
Current user:           testdb@localhost
SSL:                    Not in use
Current pager:          less
Using outfile:          ''
Using delimiter:        ;
Server version:         5.1.50-community-log MySQL Community Server (GPL)
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    latin1
Db     characterset:    gbk
Client characterset:    gbk
Conn.  characterset:    gbk
UNIX socket:            /home/vost5/mysql/mysql.sock
Uptime:                 44 min 8 sec

Threads: 1  Questions: 171  Slow queries: 1  Opens: 121  Flush tables: 1  Open tables: 26  Queries per second avg: 0.64
--------------

数据库表、字段都采用默认字符集,未使用特殊设置。


mysql>select * from abc;
查看中文正常

>echo $LANG
zh_CN.gbk

>locale -a|grep -i zh_CN
zh_CN
zh_CN.gb18030
zh_CN.gbk
zh_CN.utf8


测评程序如下:
void main()
{
char acDbname [ 30 + 1 ];
char acDbhost [ 30 + 1 ];
    char acDbuser [ 30 + 1 ];
    char acDbpass [ 30 + 1 ];
    MYSQL dbconnect;
    char acSql [ 200 + 1 ];
    MYSQL_RES *res;
    MYSQL_ROW resrow;
    int inum=0;

    memset( acDbname , 0x00, sizeof( acDbname ) );
    memset( acDbhost , 0x00, sizeof( acDbhost ) );
    memset( acDbuser , 0x00, sizeof( acDbuser ) );
    memset( acDbpass , 0x00, sizeof( acDbpass ) );

    sprintf( acDbname, "%s", (char *)getenv("DBNAME") );
    sprintf( acDbhost, "%s", (char *)getenv("DBHOST") );
    sprintf( acDbuser, "%s", (char *)getenv("DBUSER") );
    /* 打开数据库 */
    mysql_init(&dbconnect );
    mysql_real_connect( &dbconnect, acDbhost, acDbuser,acDbpass,acDbname,3306,NULL,CLIENT_FOUND_ROWS);

    printf( "return no [%d]\n",  mysql_errno(&dbconnect) );

    sprintf( acSql ,"select * from xxzd where xxdm='ZZZZZ10' order by xxdm ,zdxh" );

    mysql_query( &dbconnect , sql );

    res= mysql_store_result(&dbconnect);

    mysql_free_result( res );

    mysql_close(&dbconnect );

    printf( "resrow0[%s]\n",  resrow[0] );
    printf( "resrow1[%s]\n",  resrow[1] );
    printf( "resrow2[%s]\n",  resrow[2] );
    printf( "resrow3[%s]\n",  resrow[3] );


    return;
}

程序结果如下:
resrow0[ZZZZZ10]
resrow1[5]
resrow2[?  ?  ?]
resrow3[]

resrow2应该是中文,但却显示??,乱码了,不知问题在哪?

论坛徽章:
0
发表于 2010-09-16 13:50 |显示全部楼层
rootnone)> show charset;
rootnone)> show create databases xxx;
rootnone)> show create table abc;

论坛徽章:
0
发表于 2010-09-16 14:20 |显示全部楼层
修改my.cnf 文件

[client]节点加入
default-character-set=gbk

[mysqld]节点加入

character-set-server=gbk

论坛徽章:
0
发表于 2010-09-16 14:23 |显示全部楼层
修改my.cnf 文件

[client]节点加入
default-character-set=gbk

[mysqld]节点加入

character ...
limohao 发表于 2010-09-16 14:20



   
另外在
        mysql_init(&mysql);
        mysql_options(&mysql, MYSQL_SET_CHARSET_NAME,"GBK");
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP