C语言连接MySQL中文问题

在学习<Linux程序设计>第8章MySQL数据库8.3节:
使用C语言访问MySQL访问数据库时尝试把SQL数据换成了中文,但是在运行示例程序时终端输出却乱码,MySQL C 语言连接默认字符集是latin1
查了下API找到如下函数可解决中文乱码问题。

int mysql_set_character_set( MYSQL * mysql, char * csname)

描述
该函数用于为当前连接设置默认的字符集。字符串csname指定了1个有效的字符集名称。连接校对成为字符集的默认校对。该函数的工作方式与SET NAMES语句类似,但它还能设置mysql- > charset的值,从而影响了由mysql_real_escape_string( ) 设置的字符集。
该函数是在MySQL 5. 0. 7中增加的。
返回值
0表示成功,非0值表示出现错误。


示例:

# include < stdlib. h>
# include < stdio. h>

# include "mysql.h"

MYSQL my_connection;
MYSQL_RES * res_ptr;
MYSQL_ROW sqlrow;

void display_row( ) ;

int main( int argc, char * argv[ ] )
{
    int res;

    mysql_init( & my_connection) ;
    if ( mysql_real_connect( & my_connection, "localhost" , "rick" ,
             "secret" , "foo" , 0, NULL , 0) ) {

        /* 设置数据库默认字符集 */
        if ( mysql_set_character_set( & my_connection, "utf8" ) ) {
            fprintf ( stderr , "错误, %s/n" , mysql_error( & my_connection) ) ;
        }
        res = mysql_query( & my_connection,
                "SELECT childno, fname, age FROM children WHERE age > 5" ) ;
        if ( res) {
            fprintf ( stderr , "SELECT error: %s/n" ,
                    mysql_error( & my_connection) ) ;
        } else {
            res_ptr = mysql_use_result( & my_connection) ;
            if ( res_ptr) {
                while ( ( sqlrow = mysql_fetch_row( res_ptr) ) ) {
                    display_row( ) ;
                }
                if ( mysql_errno( & my_connection) ) {
                    fprintf ( stderr , "Retrive error: %s/n" ,
                            mysql_error( & my_connection) ) ;
                }     
                mysql_free_result( res_ptr) ;
            }
        }
        mysql_close( & my_connection) ;
    } else {
        fprintf ( stderr , "Connection failed/n" ) ;
        if ( mysql_errno( & my_connection) ) {
            fprintf ( stderr , "Connection error %d: %s/n" ,
                    mysql_errno( & my_connection) ,
                    mysql_error( & my_connection) ) ;
        }
    }
    return EXIT_SUCCESS ;
}

void display_row( )
{
    unsigned int field_count;

    field_count = 0;
    while ( field_count < mysql_field_count( & my_connection) ) {
    if ( sqlrow[ field_count] )
     printf ( "%s " , sqlrow[ field_count] ) ;
    else
     printf ( "NULL" ) ;
    field_count+ + ;
    }
    printf ( "/n" ) ;
}

输出结果:


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值