1

UnixODBC 的 SQLWCHAR 类型是 unsigned short int,与 Windows 上 wchar_t 类型的大小相匹配。我假设编码必须是 UCS2,但是使用 SQLite ODBC 驱动程序的快速测试应用程序失败了。如果我使用诸如“INSERT INTO foo(name) VALUES('ä')”之类的 UCS2 字符串调用 SQLExecDirectW(),则会存储值 0xE4(这是正确的 UCS2 值,但它应该存储为 UTF-8(0xC3A4 ))。

如果我在第一步中将 UCS2 字符串转换为 UTF-8 字符串,然后将每个字节 (!) 写入 SQLWCHAR 数组,则 SQLExecDirectW() 调用会将正确的值插入数据库。但是将 UTF-8(1 字节序列)打包成 2 字节序列(仍然包含 UTF-8)对我来说似乎是绝对错误的。

只是一个提示:

在 pyhton3 上使用 pyodbc(也使用了 Wide-API),出现了同样的问题:

cursor.execute("INSERT INTO bla VALUES('ä')")

这导致:

sqlite> select hex(id), id from bla;
E4|�
4

0 回答 0