MySQL 在MinGW64 下用gcc 编译上传出现乱码

环境: WIN10 , MINGW64 , G++ 编译。 MySQL SERVER 8.0 。
问题: 在win10 下安装 MINGW64 , 用 g++编译 , 编译指令:
g++ -Iinclude -Llib media.c -llibmysql -llibiconv2 -finput-charset=utf-8 -fexec-charset=utf-8 -o ./release/media/media.exe

但是运行结果 是 乱码。

img

数据库中画面:

img


数据图截图中没有乱码的部分, 是我手动修改用于测试。

数据库 编码设置:

img

代码:

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

    char formatTime[64]={0};
    MYSQL conn;
    MYSQL_RES* res; //一个结果集结构体
    MYSQL_ROW row; //char** 二维数组,存放一条条记录
    char* host=HOST;
    char* user=USER;
    char* pswd=PSWD;
    char* db=DB_NAME;
    char query_char[1024];
    char str[4];
    char output[OUTLEN];
    int len=0;
    int ret=0;


    GetFormatTime(formatTime);
    printf("Now: %s\t local-V0.001\n", formatTime);
    

    mysql_init(&conn);


    if(mysql_real_connect(&conn, host, user, pswd, db, 0, NULL, CLIENT_FOUND_ROWS))
    //"root":数据库管理员 "":root密码 "test":数据库的名字   
    {   
        printf("connect success!\n");
        //mysql_query("set names GBK;");
    } 
    else
    {
        printf("connect error!\n");
        exit(0);
    }


    strcpy(query_char, "select * from test");
    ret=mysql_query(&conn, query_char);
    if(ret)   
    { 
        printf("run error\n"); 
    }  
    else
    { 
        printf("OK\n"); 
    } 

    //获取结果集
    res = mysql_store_result(&conn);
    //显示数据
    //给ROW赋值,判断ROW是否为空,不为空就打印数据。
    while (row = mysql_fetch_row(res))
    {
        printf("%s \t", row[0]);//打印ID
        printf("%s \t", row[1]);//打印ID
        printf("%x,%x,%x,%x,%x,%x", row[0][0],row[0][1],row[0][2],row[0][3],row[0][4],row[0][5]);
        len = strlen(row[0]);
        ret = covert("GBK", "UTF-8", row[0], len, output, OUTLEN);
        printf("%s\t", output);
        printf("\n");
        //printf("中文\n");
    }
    
        //释放结果集
    mysql_free_result(res);


/*
    strcpy(query_char, "insert into test (A,B) values (");

    if(strcmp(argv[1],"NULL"))
    {
        strcat(query_char,"'");
        len = strlen(argv[1]);
        ret = covert("UTF-8", "GBK", argv[1], len, output, OUTLEN);
        strcat(query_char, output);
//        strcat(query_char, argv[1]);
        strcat(query_char, "',");
    }
    else
        strcat(query_char,"NULL,");

    for(int i=0;i<10;i++)
    {
        printf("argv[1][%d]: %x \t", i, argv[1][i]);
        printf("%d ", output[i]);
        printf("\n");
    }
    
    
    if(strcmp(argv[2],"NULL"))
    {
        strcat(query_char,"'");
        len = strlen(argv[2]);
           ret = covert("UTF-8", "GBK", argv[2], len, output, OUTLEN);
        strcat(query_char, output);
//        strcat(query_char, argv[2]);
        strcat(query_char, "')");
    }
    else
        strcat(query_char,"NULL,");

*/

    strcpy(query_char, "insert into test (A,B) values ('中文',2)");
    printf("%s\n", query_char);

    ret=mysql_query(&conn, query_char);
    if(ret)   
    { 
        printf("run error\n"); 
    }  
    else
    { 
        printf("OK\n"); 
    } 

    str[0]=0x3f;
    str[1]=0x3f;
    str[2]=0x0;
    str[3]=0x31;
    strcpy(query_char, "insert into test (A,B) values ('");
    strcat(query_char, str);
    strcat(query_char, "',2)");

    printf("%s\n", query_char);
    ret=mysql_query(&conn, query_char);
    if(ret)   
    { 
        printf("run error\n"); 
    }  
    else
    { 
        printf("OK\n"); 
    } 

    mysql_close(&conn);


        printf("中文\n");
    return 0;
}

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

试一下把参数改为 -fexec-charset=GBK -finput-charset=UTF-8