странное кодирование символов хранимых данных, старый скрипт показывает им прекрасный новый, не

Я пытаюсь переписать старый веб-сайт.
он находится на персидском языке, где используются персонажи perso / arabic.

CREATE DATABASE `db` DEFAULT CHARACTER SET utf8 COLLATE utf8_persian_ci; USE `db`; 

Почти все мои таблицы / столбцы COLLATE установлены на utf8_persian_ci

Я использую codeigniter для моего нового скрипта, и у меня есть

 'char_set' => 'utf8', 'dbcollat' => 'utf8_persian_ci', 

В настройках базы данных, там нет проблем.

Итак, вот странная часть

Старый сценарий использует какой-то механизм базы данных под названием TUBADBENGINE или TUBA DB ENGINE … ничего особенного.

Когда я ввожу некоторые данные в базу данных (на персидском языке), используя старый скрипт, когда я просматриваю базу данных, символы хранятся как عمران .

Старый скрипт fetch / показывает, что данные точны, но новый скрипт показывает их с тем же странным шрифтом / кодировкой как база данных

Поэтому, когда я вхожу в اااا , хранящиеся в базе данных данные выглядят как عمرا٠, когда я عمرا٠его в новом скрипте, я вижу عمرا٠но в старом сценарии я вижу اااا

 CREATE TABLE IF NOT EXISTS `tnewsgroups` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `fName` varchar(200) COLLATE utf8_persian_ci DEFAULT NULL, PRIMARY KEY (`ID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_persian_ci AUTO_INCREMENT=11 ; -- -- Dumping data for table `tnewsgroups` -- INSERT INTO `tnewsgroups` (`ID`, `fName`) VALUES (1, 'عمران'), (2, 'معماری'), (3, 'برق'), (4, 'مکانیک'), (5, 'test'), (6, 'test2'); 

С другой стороны, когда я ввожу ااااا непосредственно в базу данных

Конечно, у меня есть то же اااا хранится в базе данных

Новый скрипт показывает это хорошо

Но в старом сценарии я получаю ????

Может ли кто-нибудь понять это?

Вот туба-engin

https://github.com/maxxxir/mz-codeigniter-crud/blob/master/tuba.php

Пример использования из старого сценария:

 define("database_type" , "MYSQL"); define("database_ip" , "localhost"); define("database_un" , "root"); define("database_pw" , ""); define("database_name" , "nezam2"); define("database_connectionstring" , ""); $db = new TUBADBENGINE(database_type , database_ip , database_un , database_pw , database_name , database_connectionstring); $db->Select("SELECT * FROM tnews limit 3"); if ($db->Lasterror() != "") { echo "<B><Font color=red>ÎØÇ ! áØÝÇ ãÌÏøÏÇ ÊáÇÔ ˜äíÏ"; exit(); } for ($i = 0 ; $i < $db->Count() ; $i++) { $row = $db->Next(); var_dump($row); } 

Короче говоря, потому что это обсуждалось тысячу раз:

  1. PHP содержит строку, например "漢字" , закодированную в UTF-8. Байтами для этого являются E6 BC A2 E5 AD 97 .
  2. Он отправляет эту строку через соединение с базой данных, которое установлено на latin1 .
  3. База данных получает байты E6 BC A2 E5 AD 97 , считая, что они представляют latin1 символы.
  4. В базе данных хранятся символы æ¼¢å (символы, которые E6 BC A2 E5 AD 97 отображает на latin1 ).
  5. Тот же процесс обратный делает PHP получить те же байты, которые затем обрабатываются как UTF-8. Roundtrip отлично работает для PHP, хотя база данных не обрабатывает символы так, как должна.

Поэтому проблема заключалась в том, что соединение с базой данных было установлено неправильно, когда данные были введены в базу данных. Вам нужно будет преобразовать данные в базу данных в правильные символы. Попробуй это:

 SELECT CONVERT(BINARY CONVERT(field_name USING latin1) USING utf8) FROM table_name 

Возможно, utf8 не то, что вам нужно здесь, эксперимент. Если это сработает, измените это на UPDATE для постоянного обновления данных.