使用 libmysql 插入特殊字符
Insert special characters with libmysql
在使用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'"
。
第一次编辑:我已经阅读了将 UTF-8 编码字符串插入 UTF-8 编码的 mysql 表中的问题和答案,失败并显示"字符串值不正确",并尝试应用建议的解决方案,但它对我不起作用。 据我了解这个问题,我的问题有所不同,因为我尝试插入的字符是 Unicode 中的 U+00E9,因此只有 2 个字节。此外,我可以将其插入我的数据库,只是不能从我的C++代码中插入。
e-acute:
- htmlentities:
é
-- 避免在数据库中出现这种情况。 - 拉丁语1:十六进制
E9
- UTF8:十六进制
C3A9
- Unicode "codepoint":
U+00E9
-- 避免在数据库中使用这种情况。
建立从C++客户端到 MySQL 的连接时,请说明客户端中使用的字符编码。 基于"不正确的字符串值:'\xE9ro...",我假设它是 latin1。
另外,您可以将表中的列 (field
) 声明为CHARACTER SET latin1
或utf8
或utf8mb4
。 在第一种情况下,E9
将保持不变地通过。 在其他版本中,E9将变成C3E9。
相关文章:
- 如何用转义符替换字符串中的所有特殊字符
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- 转换特殊字符(UTF-8)
- 在将字符插入 2d 字符串时如何不显示空字符?
- 反转字符串中单词的位置,而不更改 O(1) 空格限制中特殊字符的顺序
- 如何在C++中打印此"█"特殊字符?
- 将字符串逐个字符插入矢量
- c++为什么ifstream get()函数返回无法识别的特殊字符
- 如何检查字符串是否包含所有这些:数字、字母和特殊字符
- 转义std::字符串中的特殊字符
- SDL2加载具有特殊字符的文件
- 将 std::string 转换为具有特殊字符的 FString (TCHAR / wstring)
- 如何从文本文件C++读取整数和特殊字符
- USB序列号显示特殊字符
- 键入特殊字符并保存在文件中
- 回文,不包括特殊字符和空格
- 无法使用 Unicode 特殊字符设置窗口文本
- 使用 libmysql 插入特殊字符
- 使用具有特殊字符的正则表达式标记 C++ 字符串
- 为什么要在空格中插入数字和特殊字符?