【问题标题】:Can't write accented characters to MySQL using ADO/ODBC无法使用 ADO/ODBC 将重音字符写入 MySQL
【发布时间】:2014-04-23 08:23:03
【问题描述】:

我的 C++/Win32/Unicode 程序使用 ADO/MSDASQL/MyODBC 链将数据写入 MySQL。

问题是字符串在到达 MySQL 之前被转换为 latin1,它需要 UTF8。因此,重音字符被视为无效字符而被拒绝。

我的程序将 OLE 字符串(UFT16 编码)传递给 ADO,但 MyODBC(MySQL ODBC 驱动程序)以某种方式接收到 latin1 字符串(我从源代码重新编译了 MyODBC,以通过 SqlBindParameter ODBC 函数检查驱动程序中的内容) .

我已经尝试过使用 ANSI 和 Unicode 版本的 MyODBC 5.3 驱动程序。此外,MySQL 的所有 'char%' 和 'collat​​ion%' 变量都说 'utf8'。 MyODBC 字符集配置为 utf8。

ADO 和/或 MSDASQL 怎么把我的字符串变成 latin1?

TIA。

【问题讨论】:

    标签: mysql encoding utf-8 odbc ado


    【解决方案1】:

    在带引号的字符串前面加上N 以将数据保存为Unicode:

    INSERT INTO someTable (someField) VALUES (N'Ång')
    

    【讨论】:

    • 我应该指定我使用准备好的语句
    【解决方案2】:

    我最终解决了我的问题:我使用 ADO 准备好的语句。问题是在 CreateParameter() 调用中设置准备好的语句

    PCommand->CreateParameter(
      LPCTSTR(NULL), ADODB::adVarChar, ADODB::adParamInput, 50);
    

    在那里,只需将adVarChar 替换为adVarWChar 即可解决问题。 adVarChar 似乎被视为 ANSI 字符,与底层驱动程序/数据库无关。

    【讨论】:

    • 不错的解决方案。我只涉足 .NET,不知道如何在 ADO 中使用准备好的语句,谢谢你教我一些新东西!
    猜你喜欢
    • 2013-01-21
    • 2018-04-18
    • 1970-01-01
    • 2011-03-24
    • 1970-01-01
    • 1970-01-01
    • 2013-01-22
    • 2011-09-06
    • 2015-09-05
    相关资源
    最近更新 更多