MySQL和MySQLi之间关于字符编码的区别是什么?

时间:2013-07-19 00:05:18

标签: php mysql encoding character-encoding mysqli

我在php代码中使用mysqli来连接数据库,我喜欢它的OOP功能。 数据库包含Persian语言的数据,排序规则设置为utf8_persian_ci

创建连接后,charset设置为utf8

<?php


class DBHandler {

    private $DB_HOST = "localhost"; //localhost
    private $DB_USER = "------"; //root
    private $DB_PASS = "------"; // ""
    private $DB_NAME = "------"; //test
    private $mysqli;
    private $username;

    public function __construct($user) {
        $this->username = $user;
        // CONNECT TO THE DATABASE
        $this->mysqli = new mysqli($this->DB_HOST, $this->DB_USER, $this->DB_PASS, $this->DB_NAME);
        if (mysqli_connect_errno()) {
            throw new Exception("Unable to connect to the database. Error number: " . $this->mysqli->connect_errno);
        }
        $this->mysqli->set_charset("uft8");
    }

    public function __destruct() {
        //We are done with the database. Close the connection handle.
        $this->mysqli->close();
    }
}

我希望以正确的编码检索数据,但在查询数据库后,所有字符都转为?

我只是用mysqli函数替换了所有mysql个实例,一切正常。

我想知道造成这种情况的原因是什么以及如何使用mysqli函数并以正确的编码方式获取数据?

1 个答案:

答案 0 :(得分:2)

首先:不推荐使用mysql扩展。你最好坚持使用mysqli,或者改用PDO。

您对问号(钻石?)的评价不一定​​是数据库问题。你的脚本可能使用了错误的编码。很多人有钻石的东西,and it can be solved with a single line of code

header('Content-Type: text/html; charset=utf-8');