字符编码在哪里改变?
Where does character encoding change?
我有一个 MySQL 数据库,其中 table 的条目带有重音符号,例如 "João".
条目是在 C/C++ 代码中使用 MySQL++ 查询选择的,但该条目特别打印为 "Jo�o" (printf
, fprintf
或 std::cout <<
).
我想了解的是:这个字符在数据流中的哪个位置编码不正确?
更多上下文:前端是 HTML/PHP,它使用 PDO 将数据插入 MySQL 数据库。
我在 HTML 中看到使用 PDO 查询正确显示的字符。它也可以正确显示:
mysql> select * from <table>;
所以我认为它在 table 中写得很好。问题似乎在于 MySQL++ 查询或 C/C++ 输出命令。
我不知道它是否相关,但是 MySQL 的 table 编码是 utf8_general_ci
并且 shell 语言环境是 LANG=en_US.UTF-8
。
我从这个 post 得到了答案:http://forums.mysql.com/read.php?167,243667,243695#msg-243695
问题出在 MySQL++ 上。创建连接后,我们需要执行:
mysqlpp::Query query = connection->query("SET NAMES 'utf8'");
query.execute();
我有一个 MySQL 数据库,其中 table 的条目带有重音符号,例如 "João".
条目是在 C/C++ 代码中使用 MySQL++ 查询选择的,但该条目特别打印为 "Jo�o" (printf
, fprintf
或 std::cout <<
).
我想了解的是:这个字符在数据流中的哪个位置编码不正确?
更多上下文:前端是 HTML/PHP,它使用 PDO 将数据插入 MySQL 数据库。
我在 HTML 中看到使用 PDO 查询正确显示的字符。它也可以正确显示:
mysql> select * from <table>;
所以我认为它在 table 中写得很好。问题似乎在于 MySQL++ 查询或 C/C++ 输出命令。
我不知道它是否相关,但是 MySQL 的 table 编码是 utf8_general_ci
并且 shell 语言环境是 LANG=en_US.UTF-8
。
我从这个 post 得到了答案:http://forums.mysql.com/read.php?167,243667,243695#msg-243695
问题出在 MySQL++ 上。创建连接后,我们需要执行:
mysqlpp::Query query = connection->query("SET NAMES 'utf8'");
query.execute();