我使用的是亚马逊的RDS,从数据库中读取utf数据时遇到了困难。结果显示为非utf字符,因此在数据库中使用utf-8编码时,它们显示为坏字符。
DB是从另一个MySQL数据库(而不是Amazon RDS)传输的,当代码与该数据库通信时,一切都很好。
我检查了所有表的字符集和排序规则,以及数据库本身——它们都是UTF-8和UTF_general_ci
页面使用utf-8编码,如
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
我还尝试传递这个查询"SET NAMES utf8",但仍然没有帮助。
我注意到其他人对RDS 也有同样的问题
可以';尽管在Heroku 上使用Rails设置了新的参数组,但不要在RDS中存储UTF-8
给他们的解决方案是在连接字符串中指定字符集,这个解决方案显然适用于rails,但在PHP中,我不认为有连接字符串这样的东西。
这就是我连接mysql 的方式
mysqli_connect($this->host, $this->login, $this->pw, $this->database)
此外,如果我将这些列的数据类型更改为二进制数据类型(如BLOB),它们将正常工作。
您要查找的不是连接字符串,而是最有可能更改默认客户端字符集的mysqli::set_charset();
if (!$mysqli->set_charset("utf8")) {
printf("Error loading character set utf8: %s'n", $mysqli->error);
} else {
printf("Current character set: %s'n", $mysqli->character_set_name());
}