【问题标题】:Insert special characters with libmysql使用 libmysql 插入特殊字符
【发布时间】:2019-10-13 20:16:51
【问题描述】:

在使用 libmysqlclient 的 C++ 软件中,我试图在包含 html 编码字符(例如 é)的表中插入一行。请求如下所示:

INSERT INTO mytable ( field )  VALUES( 'Justificatif d\'achat numéro 1523641305' )

失败并出现错误:

Incorrect string value: '\xE9ro 15...' for column 'field' at row 1

如果我复制我的请求,例如,将其复制到工作台并执行它,它就可以工作。但是我的代码不可能让它工作。

我的专栏采用默认排序规则的字符集 utf8。

我使用 mysql_real_connect 连接到我的数据库,并在执行连接后立即调用 "SET NAMES 'utf8'"。

第一次编辑: 我已阅读来自Inserting UTF-8 encoded string into UTF-8 encoded mysql table fails with "Incorrect string value" 的问题和答案,并尝试应用建议的解决方案,但它对我不起作用。 据我了解这个问题,我的问题是不同的,因为我尝试插入的字符是 Unicode 中的 U+00E9,因此只有 2 个字节。另外,我可以将它插入到我的数据库中,而不是从我的 C++ 代码中。

【问题讨论】:

标签: c++ mysql character-encoding


【解决方案1】:

e-急性:

  • htmlentities: é -- 在数据库中避免这种情况。
  • latin1: 十六进制 E9
  • utf8: 十六进制 C3A9
  • Unicode "codepoint": U+00E9 -- 在数据库中避免这种情况。

在建立从 C++ 客户端到 MySQL 的连接时,说明 客户端 中使用的字符编码。基于“不正确的字符串值:'\xE9ro...”,我认为它是 latin1。

另外,您可以将表中的列 (field) 声明为 CHARACTER SET latin1 或 utf8 或 utf8mb4。在第一种情况下,E9 将不变地通过。其他的E9会变成C3E9。

【讨论】:

    猜你喜欢
    • 2016-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-10
    • 1970-01-01
    • 2012-04-25
    • 2014-11-17
    • 2016-02-18
    相关资源
    最近更新 更多