更改codeigniter中的数据库编码


Change database encoding in codeigniter

是否进行

mysql_query('SET NAMES `utf8`;', $link);

与相同

$db['default']['char_set'] = 'utf8';

$db['default']['dbcollat'] = 'utf8_general_ci';

在Codeigniter上的"application''config''database.php"中?如果没有,我如何在Codeigniter中完成它?

如果您查看CI数据库驱动程序,您会发现设置字符集和排序规则的函数是用db_set_charset($charset, $collation) 调用的

进一步研究这个函数会发现这个函数(来自mysqli驱动程序(:

function _db_set_charset($charset, $collation)
{
    static $use_set_names;
    if ( ! isset($use_set_names))
    {
        // mysqli_set_charset() requires MySQL >= 5.0.7, use SET NAMES as fallback
        $use_set_names = (version_compare(mysqli_get_server_info($this->conn_id), '5.0.7', '>=')) ? FALSE : TRUE;
    }
    if ($use_set_names)
    {
        return @mysqli_query($this->conn_id, "SET NAMES '".$this->escape_str($charset)."' COLLATE '".$this->escape_str($collation)."'");
    }
    else
    {
        return @mysqli_set_charset($this->conn_id, $charset);
    }
}

这基本上意味着,如果使用MySQL 5.0.7或更新版本,将使用mysqli_set_charset((而不是"set NAMES"。

如果您需要更改这种行为,我建议您创建自己的数据库驱动程序。