0

我正在尝试使用 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);

}

在互联网上漫游无数次之后,我获得了我应该将数据从宽字符转换为 <the-thing-you-convert-it-to> 的知识,因为我正在编译 unicode。

我所有的 MySQL 表目前都以 utf8_unicode_ci 编码。

我可以从程序中收到的示例字符串:0108F164

那么我应该怎么做才能以适当的方式获取数据呢?

哦,如果我在 ansi 中编译,收到的数据会正确显示。

4

1 回答 1

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);
        }
    } 
}
于 2013-11-04T18:06:32.117 回答