gpt4 book ai didi

C++ : Data retrieved from MySQL table in win32 applications

转载 作者:行者123 更新时间:2023-11-28 07:19:08 25 4
gpt4 key购买 nike

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

}

在互联网上漫游了无数次 mancycles 之后,我获得了我应该将数据从 widechars 转换为 的知识,因为我正在用 unicode 进行编译。

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

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

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

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

最佳答案

根据您的描述,听起来 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);
}
}
}

关于C++ : Data retrieved from MySQL table in win32 applications,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19773860/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com