在使用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连接到我的DB,并在执行连接后调用"SET NAMES 'utf8'"。
第一编辑:我已经阅读了Inserting UTF-8 encoded string into UTF-8 encoded mysql table fails with "Incorrect string value"的问答,并试图应用建议的解决方案,但它对我无效。就我所理解的问题而言,我的问题是不同的,因为我试图插入的字符是Unicode中的U+00E9,因此只有2个字节。此外,我还可以将它插入到我的DB中,而不是从我的C++代码中插入。
发布于 2019-05-30 05:31:38
E-急性:
é --在数据库中避免这样做。E9C3A9U+00E9 --在数据库中避免这种情况。在建立从C++客户端到MySQL的连接时,请说明客户端中使用的字符编码。基于“不正确的字符串值:‘\xE9ro.”,我假设它是latin1。
另外,可以将表中的列(field)声明为CHARACTER SET latin1、utf8或utf8mb4。在第一种情况下,E9将不改变地通过。在其他情况下,E9将被转换为C3E9。
https://stackoverflow.com/questions/56339883
复制相似问题