无法使用ADO / ODBC将重音字符写入MySQL

时间:2014-04-23 08:23:04

标签: mysql encoding utf-8 odbc ado

我的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的变量说&#3​​9; utf8'。 MyODBC charset配置为utf8。

为什么ADO和/或MSDASQL将我的字符串转换为latin1?

TIA。

2 个答案:

答案 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。