本文共 1954 字,大约阅读时间需要 6 分钟。
在学习<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" ) ; } |
输出结果:
转载地址:https://blog.csdn.net/sayigood/article/details/5027573 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!