不应该将VARCHAR数据转换为char *(MSSQL OLE DB)吗?

时间:2011-10-05 17:45:46

标签: c++ sql-server oledb

在C ++程序中,我试图使用OLE DB从MSSQL数据库中读取数据。我试图读取的列是VARCHAR类型。列中的数据是从多值数据库导入的。有时,列中的数据中包含分隔符。分隔符是值标记(0Xfd)。我将从表中读取的数据转换为char *,如下所示:

retcode = WideCharToMultiByte(CP_UTF8, 0, (WCHAR*)pDBColumnAccess[nCol].pData, -1, (char *)pReadBuf, pDBColumnAccess[nCol].cbDataLen, NULL, NULL);

如果数据不包含上面提到的分隔符 - 值标记(0xfd),那么一切都很好。但是当分隔符存在时,在转换后的数据中,值标记被一些垃圾字符替换。

在VARCHAR的情况下,我不应该转换为char *吗?只是按原样复制数据而不进行任何转换是否足够?

1 个答案:

答案 0 :(得分:0)

WideCharToMultiByte转换为UTF-16,但UTF-16中没有0xFD字符。所有字符都编码为至少2个字节。你的意思是0x00FD(甚至是0xFD00)吗?

此外,UTF-8(您指定CP_UTF8后的“目标”编码)并不保证所有字符都只能在一个字节内编码。

根据UTF Converter

  • UTF-16 00FD转换为UTF-8 C3 BD
  • UTF-16 FD00转换为UTF-8 EF B4 80

这是你得到的吗?