MALOUDA-PSA 2025-03-19 20:16 采纳率: 85.6%
浏览 4
已结题

c++ 链接MYSQL字符编码的问题2

MYSQL 数据库字符集是 utf8mb4 , C++ 是 VS2019使用 Unicode 字符集,可是用文本打开CPP文件,发现文件编码是带 BOM 的UTF8字符集, 链接MYSQL获取数据:

std::setlocale(LC_ALL, "zh_CN.UTF-8"); 
。。。。。
    if (mysql_set_character_set(conn, "utf8") != 0) {
        std::cerr << "Error setting character set to utf8: " << mysql_error(conn) << std::endl;
    }

这里必须时 utf8, , 用 utf8mb4 就不行, 出来结果就是 ????, 而用 mysql_set_character_set(conn, "utf8") 出来显示就正常

  • 写回答

2条回答 默认 最新

  • 道友老李 JWE233286一种基于机器视觉的水表指针读数识别及修正的方法 专利发明者 2025-03-19 20:18
    关注
    让【道友老李】来帮你解答,本回答参考gpt编写,并整理提供,如果还有疑问可以点击头像关注私信或评论。
    如果答案让您满意,请采纳、关注,非常感谢!
    在MySQL中,utf8只支持最多3字节的unicode字符,而utf8mb4支持最多4字节的unicode字符。所以如果数据库中存储的是utf8mb4的数据,而C++中设置的是utf8,则可能会出现乱码的情况。 为了解决这个问题,可以使用utf8mb4字符集来链接MySQL,并在C++中设置字符集为utf8mb4。即修改代码为:
    std::setlocale(LC_ALL, "zh_CN.UTF-8");
    if (mysql_set_character_set(conn, "utf8mb4") != 0) {
        std::cerr << "Error setting character set to utf8mb4: " << mysql_error(conn) << std::endl;
    }
    

    这样就能够正确地显示从数据库中读取的utf8mb4数据了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月27日
  • 已采纳回答 3月19日
  • 创建了问题 3月19日