【发布时间】: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++ 代码中。
【问题讨论】:
-
另请阅读: medium.com/@adamhooper/…
-
那么您需要出示您的minimal reproducible example。
-
正如@LightnessRacesinOrbit 所建议的那样,由于问题出在您的 C++ 应用程序上,因此您需要包含一个可重现的示例,说明您在 C++ 中所做的事情。但是,心理调试:您说您在建立连接之后执行
"SET NAMES 'utf8'";但根据stackoverflow.com/questions/8112153/…,您需要在mysql_init之后但在mysql_real_connect之前拨打mysql_options。 -
dup(stackoverflow.com/questions/11936950/…)涉及utf8mb4的4字节码;这里情况不同。所以我要重新开放了。
标签: c++ mysql character-encoding