UnixODBC的SQLWCHAR类型是unsigned short int,与Windows上的wchar_t类型的大小相匹配。我假设编码必须是UCS2,但使用SQLite ODBC驱动程序的快速测试应用程序失败。 如果我用一个UCS2字符串调用SQLExecDirectW(),如“INSERT INTO foo(name)VALUES('ä')”,则存储值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|�