gpt4 book ai didi

c++ - 跨平台mySQL与字符集不一致

转载 作者:行者123 更新时间:2023-11-29 18:29:56 25 4
gpt4 key购买 nike

我有一个脚本,可以创建一个数据库、其中的几个表并填充数据。该脚本是根据 Windows 上的 SQLite 数据库编写的。该脚本中的一个表名为“abcß”(“abc+ALT225”)。

接下来我尝试通过 mySQL Workbench 将此脚本加载到 mySQL。服务器和工作台都在 Linux 上运行。

修复一些语法不一致后,数据库已成功创建。我尝试查询数据库和表。除上面的表外,所有表均已成功查询。

尝试查询“information_table.tables.table_name”,我得到的名称为“abc\0d-61\0d63”,它给出的结果与原始名称不同。因此,我的程序在运行时崩溃,因为我将表名发送到了 codecvt_utf-8 编码器。

数据库和表是使用默认编码创建的。

有人知道为什么我没有看到正确的结果吗?

但最重要的是 - 我认为程序正在崩溃,因为某些字符不在 wchar_t/utf-8 编码范围内。所以我很好奇 - 我应该使用什么将该序列转换为 std::wstring?

TIA!

<小时/>

编辑:

代码如下:

class MySQLDatabase
{
public:
int LoadDatabaseData();
protected:
struct MySQLImpl;
MySQLImpl *m_pimpl;
};

struct MySQLDatabase::MySQLImpl
{
std::wstring_convert<std::codecvt_utf8<wchar_t> > m_myconv;
};

int MySQLDatabase::LoadDatabaseData()
{
const char *table_name;
std::wstring tableName = m_pimpl->m_myconv.from_bytes( table_name );
}
<小时/>

编辑2:

如果我添加以下内容,您认为它会起作用吗:

   std::wstring_convert<std::codecvt_utf16<wchar_t> > m_myconv;

<小时/>

编辑3:

这是我在工作台中看到的内容:

# TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, ENGINE, VERSION, ROW_FORMAT, TABLE_ROWS, AVG_ROW_LENGTH, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, AUTO_INCREMENT, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, CHECKSUM, CREATE_OPTIONS, TABLE_COMMENT
'def', 'draft', 'abcÃ', 'BASE TABLE', 'InnoDB', '10', 'Compact', '0', '0', '16384', '0', '0', '0', NULL, '2016-12-09 00:15:27', NULL, NULL, 'utf8_general_ci', NULL, '', ''

最佳答案

请勿使用 utf-16 进行任何操作。

不要使用“unicode”。

\0d-61 到底是从哪里来的?

不要使用任何转换子例程,返回源并确保其编码为 UTF-8。

为了验证您是否使用 UTF-8,abcß 为十六进制 61 62 63 C39F

关于c++ - 跨平台mySQL与字符集不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45777342/

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