用libmysql插入特殊字符

时间:2019-05-28 10:13:24

标签: c++ mysql character-encoding

在使用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 ++代码中插入。

1 个答案:

答案 0 :(得分:0)

电子急性:

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

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

您可以分别将表中的列(field声明为CHARACTER SET latin1utf8utf8mb4。在第一种情况下,E9将不变地通过。在其他版本中,E9将变成C3E9。