首页 > 解决方案 > 在我的数据库中,希腊字母之后的所有内容都是空的

问题描述

我遇到了我确定是编码错误,但我似乎无法在我的逻辑中找到薄弱环节。特别是,当尝试将希腊 lambda 插入我的数据库时,该 lambda 之后的单元格是空白的。

过程:

在打印任何 html 之前,我正在做:

header('Content-Type: text/html; charset=utf-8');

接下来,我使用 PDO 进行连接:

$dsn = 'mysql:host=' . $config['host'] . ';dbname=' . $config['dbname'] . ';charset=utf8';
 $options = array(
            PDO::ATTR_EMULATE_PREPARES => false, 
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
        );
        try {
            $dbh = new PDO($dsn, $config['username'], $config['password'], $options);
            $dbh->exec("SET NAMES utf8");
            $dbh->exec("SET FOREIGN_KEY_CHECKS = 1");

当我做

显示来自 my_table 的完整列

我可以看到排序规则是 utf8_general_ci。当我做:

echo mb_detect_encoding($data_to_be_entered);

我得到 UTF-8

当我在将 $data_to_be_entered 插入数据库之前将其回显到控制台时,我看到: (=23)

但是,在我的数据库中,我只看到 ( 作为条目。

标签: phpmysqlpdoencodingcharacter-encoding

解决方案


那个 lambda是数学符号。它以 UTF-8 编码为四个字节 hex F09D9C86。因此,它需要 MySQL CHARACTER SET utf8mb4,而不是 utf8。

如果您想要希腊语 lambda λ,则可以使用CHARACTER SET utf8(或 utf8mb4)。它的十六进制是CEBB.


推荐阅读