【问题标题】:Where does character encoding change?字符编码在哪里改变?
【发布时间】:2016-06-27 05:23:57
【问题描述】:

我有一个 MySQL 数据库,其中包含一个带有重音条目的表,例如“João”。

这些条目是使用 C/C++ 代码中的 MySQL++ 查询选择的,但该条目特别打印为“Jo�o”(printffprintfstd::cout <<)。

我想了解的是:这个字符在数据流中的哪个位置被错误编码?

更多上下文:前端是 HTML/PHP,它使用 PDO 将数据插入 MySQL 数据库。

我看到在 HTML 中使用 PDO 查询正确显示的字符。它也正确显示:

mysql> select * from <table>;

所以我认为它在表格中写得很好。问题似乎在于 MySQL++ 查询或 C/C++ 输出命令。

我不知道是否相关,但是MySQL的表编码是utf8_general_ci,shell locale是LANG=en_US.UTF-8

【问题讨论】:

  • 字符可以随时更改,是否正确发送到数据库,数据库是否正确写入,读取时读取是否正确?看看stackoverflow.com/questions/279170/utf-8-all-the-way-through
  • @chris85 您应该将其添加为答案。它可以在任何地方改变。
  • @chris85,我看到在 HTML 中使用 PDO 查询正确显示的字符。它也正确显示在mysql&gt; select * from &lt;table&gt;; 中,所以我认为它在表格中写得很好,为UTF-8。问题似乎在于 MySQL++ 查询或 C/C++ 输出命令。

标签: php mysql pdo mysql++


【解决方案1】:

我从这篇文章中得到了答案:http://forums.mysql.com/read.php?167,243667,243695#msg-243695

问题在于 MySQL++。创建连接后,我们需要执行:

mysqlpp::Query query = connection->query("SET NAMES 'utf8'");
query.execute();

【讨论】:

    猜你喜欢
    • 2014-12-21
    • 1970-01-01
    • 2013-06-16
    • 2018-09-29
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多