vs2010 将mysql中数据导入到MFC列表中显示乱码 10

代码如下BOOLCsqltextDlg::OnInitDialog(){CDialogEx::OnInitDialog();//将“关于...”菜单项添加到系统菜单中。/... 代码如下
BOOL CsqltextDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();

// 将“关于...”菜单项添加到系统菜单中。

// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}

// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标

// TODO: 在此添加额外的初始化代码
m_List.SetExtendedStyle(LVS_EX_FLATSB
|LVS_EX_FULLROWSELECT
|LVS_EX_HEADERDRAGDROP
|LVS_EX_ONECLICKACTIVATE
|LVS_EX_GRIDLINES);
m_List.InsertColumn(0,_T("ID"),LVCFMT_LEFT,100,0);
m_List.InsertColumn(1,_T("Name"),LVCFMT_LEFT,100,1);
m_List.InsertColumn(2,_T("CountryCode"),LVCFMT_LEFT,100,2);
m_List.InsertColumn(3,_T("District"),LVCFMT_LEFT,100,3);
m_List.InsertColumn(4,_T("Population"),LVCFMT_LEFT,100,4);

MYSQL m_MySQL;
mysql_init(&m_MySQL);
if(!mysql_real_connect(&m_MySQL,"localhost","root","159753","world",3306,NULL,0))
{
AfxMessageBox(_T("数据库连接失败"));
return FALSE;
}

char *ch_query;
ch_query="SELECT * FROM city";
if(mysql_real_query(&m_MySQL,"SELECT * FROM city",(UINT)strlen(ch_query))!=0)
{
AfxMessageBox(_T("读取数据表格失败!"));
return FALSE;
}

MYSQL_RES *result;
MYSQL_ROW row;

if(!(result=mysql_use_result(&m_MySQL)))
{
AfxMessageBox(_T("读取数据集失败"));
return FALSE;
}
CString str;
int i=0;
while(row = mysql_fetch_row(result))
{
str.Format(_T("%s"),row[0]);
m_List.InsertItem(i,str);
str.Format(_T("%s"),row[1]);
m_List.SetItemText(i,1,str);
str.Format(_T("%s"),row[2]);
m_List.SetItemText(i,2,str);
str.Format(_T("%s"),row[3]);
m_List.SetItemText(i,3,str);
str.Format(_T("%s"),row[4]);
m_List.SetItemText(i,4,str);
i++;
}
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}

同样的代码在去掉str.Format(_T("%s"),row[i]);中的 _T()后在VC6.0中可以显示正常的英文 如下图

下图是数据库中表信息
展开
 我来答
orzt14174
2014-07-11
知道答主
回答量:2
采纳率:0%
帮助的人:2935
展开全部
我也遇到跟楼主一样的问题,但是我不同的是:我的mysql 数据库是CentOS虚拟机的,数据库,表,字段都用gb2312编码。然而,在代码中查询之前加入
mysql_options(&m_mysql,MYSQL_SET_CHARSET_NAME,"gb2312");
或者
mysql_query(&m_mysql,"set names gb2312;");
查询的结果每一列,不管是整形还是英文字段,都是乱码。
而用insert或者update操作数据库,即使是中文,也不出现乱码。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xiao19890303
2013-10-03 · TA获得超过561个赞
知道小有建树答主
回答量:508
采纳率:0%
帮助的人:297万
展开全部
if(!mysql_real_connect(&m_MySQL,"localhost","root","159753","world",3306,NULL,0))
{
AfxMessageBox(_T("数据库连接失败"));
return FALSE;
}

char *ch_query;

在这里加一句设置SQL里有一句是设置数据库用的字符集的 函数 我以前和你遇到过一样的问题
自己百度下 MYSQL更改字符集的sql语句 把字符集改成 GBK936 或者GB-2312就没问题了 现在数据库不支持中文

ch_query="SELECT * FROM city";
if(mysql_real_query(&m_MySQL,"SELECT * FROM city",(UINT)strlen(ch_query))!=0)
{
AfxMessageBox(_T("读取数据表格失败!"));
return FALSE;
}

另外 数据库本身出要建成GB2312的
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式