【问题标题】:Amazon RDS, UTF-8 unicode issue with phpAmazon RDS,php 的 UTF-8 unicode 问题
【发布时间】:2012-03-24 23:00:13
【问题描述】:

我正在使用 Amazon 的 RDS,但在从数据库中读取 utf 数据时遇到了困难。结果显示为非 utf 字符,因此在 db 中使用 utf-8 编码时,它们显示为坏字符。

数据库是从另一个 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 时遇到了同样的问题

Can't store UTF-8 in RDS despite setting up new Parameter Group using Rails on Heroku

给他们的解决方案是在连接字符串中指定字符集,该解决方案显然适用于rails,但在PHP中我认为没有连接字符串这样的东西。

这就是我连接mysql的方式

mysqli_connect($this->host, $this->login, $this->pw, $this->database)

此外,如果我将这些列的数据类型更改为二进制数据类型,例如 BLOB,它们将正常工作。

【问题讨论】:

    标签: php utf-8 amazon-web-services amazon-rds


    【解决方案1】:

    您要查找的内容很可能是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());
    }
    

    【讨论】:

    • 谢谢你,但它没有帮助,我想也许 mysqldum 没有正确转储 unicode 字符,但我用 wc -m 计算文件中的字母,它们是小于以字节为单位的文件大小,因此这可能意味着某些字符存储在 unicode 中。
    猜你喜欢
    • 2010-12-26
    • 2018-06-17
    • 2014-08-21
    • 2011-11-30
    • 2011-06-05
    • 2011-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多