我的C ++ / Win32 / Unicode程序使用ADO / MSDASQL / MyODBC链将数据写入MySQL。
问题是字符串在到达MySQL之前转换为latin1,而MySQL需要UTF8。因此,重音字符被拒绝为无效字符。
我的程序将OLE字符串(UFT16编码)传递给ADO但不知何故MyODBC(MySQL ODBC驱动程序)收到latin1字符串(我从源代码重新编译MyODBC以通过SqlBindParameter ODBC检查驱动程序中的内容功能)。
我已尝试使用ANSI和Unicode版本的MyODBC 5.3驱动程序。此外,所有' char%'和'整理%' MySQL的变量说' utf8'。 MyODBC charset配置为utf8。
为什么ADO和/或MSDASQL将我的字符串转换为latin1?
TIA。
答案 0 :(得分:1)
在带引号的字符串前加N
将数据保存为Unicode:
INSERT INTO someTable (someField) VALUES (N'Ång')
答案 1 :(得分:1)
我最终解决了我的问题:我使用ADO预处理语句。问题是CreateParameter()调用准备好的声明
PCommand->CreateParameter(
LPCTSTR(NULL), ADODB::adVarChar, ADODB::adParamInput, 50);
在那里,只需将adVarChar
替换为adVarWChar
即可解决问题。 adVarChar似乎被认为是ANSI字符而不考虑底层驱动程序/ DB。