【问题标题】:utf8_unicode_ci seems not to be UTF8utf8_unicode_ci 似乎不是 UTF8
【发布时间】:2017-04-18 12:59:38
【问题描述】:

我的 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中的数据...重新浏览数组非常多余...

感谢您的帮助

【问题讨论】:

    标签: php mysql sql json


    【解决方案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

    【讨论】:

    • 确实,谢谢@raidenace。我必须将 [PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"] 添加到 PDO 连接中。
    猜你喜欢
    • 2013-10-13
    • 2019-12-01
    • 1970-01-01
    • 2019-07-31
    • 2022-11-10
    • 2022-11-26
    • 2023-01-12
    • 2014-03-13
    • 1970-01-01
    相关资源
    最近更新 更多