2017-04-18 158 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