1、示例代码如下:
void Test_Xutao(otl_connect& otlConn)
{
char* sql ="select name from nbs_program_org where name='鍒嗙粍1'";
string name;
try
{
otl_stream stream(1,sql,otlConn);
stream>>name;
}
catch (otl_exception& ex)
{
printf("ExecuteSql Error, ErrorMsg[%s], Sql[%s]",
ex.msg,
ex.stm_text);
}
}
鍒嗙粍1 是utf8格式的中文【分组1】,因为vs使用gb来解释utf8,因此显示乱码。
上面的查询,不能查询回来结果。
2、通过抓包到3306的端口,发现与数据库的交互,并不是utf8格式。
怎么解决这个问题?
3、使用占位符的方式,如下:
void Test_Xutao(otl_connect& otlConn)
{
char* sql ="select name from nbs_program_org where name=:Name<char[40]>";
string name;
try
{
otl_stream stream(1,sql,otlConn);
stream<<"鍒嗙粍1";
stream>>name;
}
catch (otl_exception& ex)
{
printf("ExecuteSql Error, ErrorMsg[%s], Sql[%s]",
ex.msg,
ex.stm_text);
}
}
4、上面的问题,在windows下才有,linux两种方式都是可以的。如下:
void Test_Xutao111(otl_connect& otlConn)
{
char* sql ="select name from nbs_program_org where name='分组1'";
string name;
try
{
otl_stream stream(1,sql,otlConn);
stream>>name;
}
catch (otl_exception& ex)
{
printf("ExecuteSql Error, ErrorMsg[%s], Sql[%s]",
ex.msg,
ex.stm_text);
}
printf("Test_Xutao111[%s]\n\n\n",name.c_str());
}
void Test_Xutao222(otl_connect& otlConn)
{
char* sql ="select name from nbs_program_org where name=:Name<char[40]>";
string name;
try
{
otl_stream stream(1,sql,otlConn);
stream<<"分组1";
stream>>name;
}
catch (otl_exception& ex)
{
printf("ExecuteSql Error, ErrorMsg[%s], Sql[%s]",
ex.msg,
ex.stm_text);
}
printf("Test_Xutao222[%s]\n\n\n",name.c_str());
}
注意:这里在crt上面,已经是utf格式,所以是中文【分组1】