Я пытаюсь переписать старый веб-сайт.
он находится на персидском языке, где используются персонажи 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); }
Короче говоря, потому что это обсуждалось тысячу раз:
"漢字"
, закодированную в UTF-8. Байтами для этого являются E6 BC A2 E5 AD 97
. latin1
. E6 BC A2 E5 AD 97
, считая, что они представляют latin1
символы. æ¼¢å
(символы, которые E6 BC A2 E5 AD 97
отображает на latin1
). Поэтому проблема заключалась в том, что соединение с базой данных было установлено неправильно, когда данные были введены в базу данных. Вам нужно будет преобразовать данные в базу данных в правильные символы. Попробуй это:
SELECT CONVERT(BINARY CONVERT(field_name USING latin1) USING utf8) FROM table_name
Возможно, utf8
не то, что вам нужно здесь, эксперимент. Если это сработает, измените это на UPDATE
для постоянного обновления данных.