У меня есть следующий скрипт:
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:
строка (25) «Ø» „جيÙا»
Второй var_dump:
строка (8) «شيلى»
Может ли кто-нибудь1 объяснить, почему эта разница и как ее исправить? Разбор БД, разбор таблиц и разбор столбцов — utf8_unicode_ci.
Пытаться:
1- выполнить этот запрос ALTER DATABASE mydatabasename charset=utf8;
2-использование SET NAMES utf8
прежде чем делать какой-либо запрос
3-использование DEFAULT CHARSET=utf8
при создании новых таблиц
изменить таблицу
ALTER TABLE `tableName` CHARACTER SET utf8;
«Ø¨Ù„ جيكا »- это« двойное кодирование »для« شيلى ». ВЫБЕРИТЕ HEX (col) … из таблицы, чтобы увидеть, что у вас есть. «C398C2B4C399C5A0C399E2809EC399E280B0» — это значение с двойным кодированием для того, каким должно быть шестнадцатеричное значение: «D8B4D98AD984D989». Двойное кодирование обсуждается в http://mysql.rjweb.org/doc.php/charcoll . Если ответ Усамы не удастся исправить данные; прочитайте этот блог и / или давайте обсудим проблему дальше.