PHP/MySQL 的字符编码问题

Character encoding issue with PHP/MySQL

我有一个在我的计算机上本地开发的 Web 应用程序,我最近在我的 Web 服务器上启动了它,其设置与 MySQL 完全相同,但由于某种原因,我遇到了字符编码“弯引号”(') 显示为带有问号 (�) 的黑色三角形的问题,但仅在服务器上显示。

这是在 HTML:

<meta http-equiv="content-type" content="text/html; charset=utf-8" />

我的本地 MySQL 数据库(没有字符问题)是 MySQL 5.7.26,带有 InnoDB table,UTF8MB4 编码和 table 归类共 utf8mb4-unicode-ci

我的服务器 MySQL 数据库(有字符问题)是 MySQL 5.5.5-10.3.21,InnoDB table 编码 UTF8MB4 和 table utf8mb4-unicode-ci

的排序规则

也许我遗漏了某个 PHP 设置?

编辑:

如果我 运行 我的计算机上的这个脚本运行良好,但是如果我 运行 我的服务器上的相同脚本和数据库中的相同数据,它会给我字符编码问题:

error_reporting(E_ALL);

include 'dbconfig.php';

$id = 19;

try {
    $pdo = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    $pdo->setAttribute(PDO::ATTR_ORACLE_NULLS, PDO::NULL_TO_STRING);
    $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
    $sql = $pdo->prepare("SELECT * FROM products WHERE id=:id");
    $sql->execute(['id' => $id]); 

    var_dump ($sql->fetch());

    while ($row = $sql->fetch()) {
        $data[] = $row;
    }

    echo json_encode($data);

} catch(PDOException $e) {
    //echo "Error: " . $e->getMessage();
    echo "Database Error";
}
$conn = null;

(因为这明显显示了 PDO 遗漏,所以我重新打开)

One-line 变化:

$pdo = new 
    PDO("mysql:host=$servername;dbname=$dbname;dbname=db;charset=utf8mb4'",
        $username, $password);

参考文献:
http://mysql.rjweb.org/doc.php/charcoll#php
(特别注意“黑钻石”)