C语言连接MySQL中文问题
发布日期:2021-07-27 19:26:52 浏览次数:3 分类:技术文章

本文共 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:在MYSQL中插入当前时间
下一篇:修改ubuntu下mysql默认编码

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月19日 02时15分51秒