我正在尝试使用MySQL Connector / C从MySQL数据库中检索数据。 一切都很好,除了我收到的所有数据都是完全的胡言乱语:)
这是我的mysql连接和数据接收代码:
void mysql_connect(HWND hwnd) {
MYSQL mysql;
mysql_init(&mysql);
mysql_real_connect(&mysql, "localhost", "root", "", "thetable", 3306, NULL, 0);
mysql_query(&mysql, "SELECT name, pass FROM users ORDER BY id ASC");
MYSQL_RES *res = mysql_store_result(&mysql);
if (res == NULL)
{
wchar_t err[64];
swprintf(err, 64, L"%p", mysql_error(&mysql));
MessageBox(NULL, err, L"Error", (UINT) MB_OK | MB_ICONINFORMATION);
mysql_close(&mysql);
return;
}
int num_fields = mysql_num_fields(res);
MYSQL_ROW row;
while ((row = mysql_fetch_row(res)))
{
for(int i = 0; i < num_fields; i++)
{
wchar_t r[128];
swprintf(r, 128, L"%p", row[i]);
MessageBox(NULL, r, L"Data", (UINT) MB_OK | MB_ICONINFORMATION);
}
}
mysql_free_result(res);
mysql_close(&mysql);
}
在互联网上漫游无数的二十世纪之后,我获知了我应该将数据从宽带转换为&lt;因为我正在使用unicode进行编译,所以你将它转换为&gt ;.
我所有的MySQL表目前都以utf8_unicode_ci编码。
我可以从程序收到的示例字符串:0108F164
那么我该怎样做才能以适当的方式获取数据呢?
哦,如果我在ansi中编译,收到的数据会正确显示。
答案 0 :(得分:1)
根据您的描述,听起来MySQL正在返回UTF-8字符串,您将其解释为UTF-16字符串。您需要通过MultiByteToWideChar运行它以将UTF8转换为UTF-16。
MYSQL_ROW row;
while ((row = mysql_fetch_row(res)))
{
for(int i = 0; i < num_fields; i++)
{
wchar_t r[128];
if (MultiByteToWideChar(CP_UTF8, 0, row[i], -1, r, ARRAYSIZE(r)) != 0)
{
// success!
MessageBox(NULL, r, L"Data", (UINT) MB_OK | MB_ICONINFORMATION);
}
else
{
DWORD err = GetLastError();
swprintf(r, 128, L"Error %x", err);
MessageBox(NULL, r, L"Error", (UINT) MB_OK | MB_ICONERROR);
}
}
}