PHP 从 mysql 中选择时,字符串未转换为 utf 8

PHP string is not converted to utf 8 when selected from mysql

我有以下脚本:

header('Content-type: text/plain; charset=utf-8');

$rq = "SELECT `name` FROM `mapamond_countries` WHERE `id` = 93";
$str = $db->GetAll($rq);

var_dump($str[0]['name']);
var_dump("شيلى");

字符串 شيلى 是从数据库 (phpmyadmin) 复制粘贴的。

首先var_dump: string(25) "بلجيكا"

第二个var_dump: string(8) "شيلى"

任何人都可以解释为什么会出现这种差异以及如何解决它吗?数据库整理、table 整理和列整理是 utf8_unicode_ci.

尝试:

1- 运行 这个查询 ALTER DATABASE mydatabasename charset=utf8;

2-在执行任何查询之前使用 SET NAMES utf8

3-在创建新的 tables

时使用 DEFAULT CHARSET=utf8

改变table

ALTER TABLE `tableName` CHARACTER SET utf8;

"بلجيكا" 是 "double encoding" 表示“شيلى”。 SELECT HEX(col)... 来自 table 看看你有什么。 "C398C2B4C399C5A0C399E2809EC399E280B0" 是十六进制的双重编码值:"D8B4D98AD984D989"。 http://mysql.rjweb.org/doc.php/charcoll 中讨论了双重编码。如果 Osama 的回答未能修复数据;阅读该博客 and/or 让我们进一步讨论这个问题。