我编写了一个程序,可以将SQL Server表转换为SQLite表。这是一个使用ADO(COM)从SQL Server和C SQLite接口(由我自己的C++类包装)检索数据的C++程序。
在SQL Server中,我有一条记录,其中一个字段包含以下内容:
H·AGEN-DAZS
(第一个A上面有两个点)。我通过ADO读取这个字段,并将它从BSTR转换为char*,然后将它绑定到一个sqlite insert语句。当我在sqlitespy(和其他工具)中查看这个字段时,我看到该字段显示为“h_?.5 agen-daz”。
在调试器中,我可以看到_是字符0xC4,这是该字符的正确UTF-8表示形式。似乎是sqlite弄坏了我的“_
这是我的sqlite create table语句:
CREATE TABLE Company ([Lookup] CHAR (30))
这是我的sqlite insert语句:
INSERT INTO Company ([Lookup]) VALUES (?)
我使用此函数调用将ADO提供的BSTR转换为char*:
WideCharToMultiByte(CP_ACP,0,In_,-1,Out_,MaxLen_,0,0);
这是我的sqlite bind语句:
sqlite3_bind_text(Statement,1,Text_,-1, (BindFunction) SQLITE_TRANSIENT);
我已经在调试器中确认,此时,文本_u是“h_ agen-dazs”,而a实际上是字符0xc4。
你有什么想法吗?