在使用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 ++代码中插入。
答案 0 :(得分:0)
电子急性:
é
-在数据库中避免这种情况。E9
C3A9
U+00E9
-在数据库中避免这种情况。在建立从C ++客户端到MySQL的连接时,请说明客户端中使用的字符编码。基于“不正确的字符串值:'\ xE9ro ...”,我认为它是latin1。
您可以分别将表中的列(field
声明为CHARACTER SET latin1
或utf8
或utf8mb4
。在第一种情况下,E9
将不变地通过。在其他版本中,E9将变成C3E9。