2017-04-18 138 views
0

我得到了一些奇怪的我的mySql数据库... 我的表编码在“utf8_unicode_ci”,但是当我对它做一个SELECT时,数据似乎不是UTF8,因为json_encode给出一个空串。utf8_unicode_ci似乎不是UTF8

我不得不重新浏览结果重新编码为UTF8数据...

$q = $this->db->prepare("SELECT ..."); 

    $q->execute(); 

    $data = $q->fetchAll(); 

    foreach ($data as $key => $value) { 
     $data[$key] = utf8_encode($value); 
    } 

    return $data; 

之后,json_encode做他的工作。但我不明白为什么我的表编码在“utf8_unicode_ci”的SELECT结果不直接提取UTF8中的数据...这是非常多余的重新浏览数组...

感谢您的帮助

回答

1

以UTF-8编码的Mysql表格是不够的。这只能确保数据以UTF-8“存储”。当它被“传递”给外部源时,即使传递管道也必须是UTF-8编码的。您还需要设置char set for the connection link identifier

它的工作原理有点像这样:

$mysqli = new mysqli("server", "user", "password", "test"); 
$mysqli->set_charset("utf8"); 

还检查了SET NAMES utf8

+0

事实上,由于@raidenace。我不得不向PDO连接添加[PDO :: MYSQL_ATTR_INIT_COMMAND =>“SET NAMES utf8”]。 – Macbernie