环境: 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
但是运行结果 是 乱码。
数据库中画面:
数据库 编码设置:
代码:
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