从mysql中选择时,PHP字符串不会转换为utf 8
我有以下脚本:从mysql中选择时,PHP字符串不会转换为utf 8,php,mysql,encoding,utf-8,collate,Php,Mysql,Encoding,Utf 8,Collate,我有以下脚本: 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)复制粘贴的 第一个变量转储: 字符串(2
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)复制粘贴的
第一个变量转储:
字符串(25)“ÙÙÙÙÙÙكا”
第二个变量转储:
弦(8)“شيلى”
有人能解释为什么会有这种差异以及如何解决它吗?DB collate、表collate和列collate是utf8\u unicode\u ci。请尝试:
1-运行此查询alterdatabasemydatabasename charset=utf8代码>
2-在执行任何查询之前,请使用设置名称utf8
3-创建新表时使用默认字符集=utf8
改变桌子
ALTER TABLE `tableName` CHARACTER SET utf8;
“二重编码”是“二重编码”的意思。选择十六进制(列)。。。从桌子上看你有什么。“C398C2B4C399C5A0C399E2809EC399E280B0”是十六进制的双编码值:“D8B4D98AD984D989”。本文讨论了双重编码。如果Osama的回答无法修复数据;阅读该博客和/或让我们进一步讨论这个问题。字符集不是列属性吗?在表上设置时,您只是为新列设置默认值?系统管理员更改了db排序规则,因此插入b4的所有内容都是错误的。已使用将排序规则\u连接设置为旧连接,并将名称设置为utf8,现在一切正常。的可能重复