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

时间:2015-02-25 14:21:09

标签: 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)复制粘贴的。

首先是var_dump: string(25)“بٔجيكا“

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

any1可以解释为什么会出现这种差异以及如何解决这个问题? DB collat​​e,table collat​​e和column collat​​e是utf8_unicode_ci。

2 个答案:

答案 0 :(得分:1)

尝试:

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

在进行任何查询之前

2次使用SET NAMES utf8

创建新表时

3次使用DEFAULT CHARSET=utf8

改变表格

ALTER TABLE `tableName` CHARACTER SET utf8;

答案 1 :(得分:0)

“ب”“جيكا”是“شيلى”的“双重编码”。从表中选择HEX(col)...看看你有什么。 “C398C2B4C399C5A0C399E2809EC399E280B0”是十六进制应为的双重编码值:“D8B4D98AD984D989”。 http://mysql.rjweb.org/doc.php/charcoll中讨论了双重编码。如果奥萨马的答案无法修复数据;阅读该博客和/或让我们进一步讨论这个问题。