最新消息:

C语言连接MySQL中文乱码问题

未分类 admin 3893浏览 0评论

使用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” ) ;
}

输出结果:

[root@aikaiyuan c]$ ./select

2 羊八井 17

3 杨家将 9

4 Duncan 6

6 Alex 15

7 Adrian 9

转载请注明:爱开源 » C语言连接MySQL中文乱码问题

您必须 登录 才能发表评论!