亚马逊RDS,UTF-8 unicode与php的问题


Amazon RDS, UTF-8 unicode issue with php

我使用的是亚马逊的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());
}