utf8_unicode_ci似乎不是UTF8

时间:2017-04-18 12:59:38

标签: php mysql sql json

我的mySql数据库出了点奇怪... 我的表格编码为" utf8_unicode_ci",但是当我对它进行SELECT时,数据似乎不是UTF8,因为json_encode给出一个空字符串。

我必须重新浏览结果以重新编码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完成了他的工作。但我不明白为什么我的表中的SELECT结果编码为" utf8_unicode_ci"不能直接以UTF8提取数据......重新浏览数组是非常多余的......

感谢您的帮助

1 个答案:

答案 0 :(得分: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