我遇到了确定为编码错误的错误,但似乎找不到逻辑上的薄弱环节。特别是,当尝试在我的数据库中插入希腊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)
但是,在我的数据库中,我仅看到(作为条目。
lambda 𝜆
是数学符号。它以UTF-8编码为four字节的十六进制F09D9C86
。因此,它需要MySQL CHARACTER SET utf8mb4
,而不是utf8。
如果需要希腊语lambda λ
,则可以与CHARACTER SET utf8
(或utf8mb4)配合使用。十六进制为CEBB
。