Saya cuba menulis semula laman web lama.
Ia dalam bahasa Parsi dan menggunakan aksara Parsi/Arab.
CREATE DATABASE `db` DEFAULT CHARACTER SET utf8 COLLATE utf8_persian_ci; USE `db`;
Hampir semua jadual/lajur saya telah COLLATE ditetapkan kepadautf8_persian_ci
Saya menggunakan codeigniter untuk skrip baharu saya dan saya telah
'char_set' => 'utf8', 'dbcollat' => 'utf8_persian_ci',
Dalam tetapan pangkalan data, jadi tiada masalah.
Jadi inilah bahagian yang pelik
Skrip lama menggunakan sejenis enjin pangkalan data yang dipanggilTUBADBENGINE或TUBA DB ENGINE... tiada yang istimewa.
Apabila saya memasukkan beberapa data (Parsi) dalam pangkalan data menggunakan skrip lama, apabila saya melihat pangkalan data, aksara disimpan sebagaiØ1مران.
Skrip lama mendapat/memaparkan data dengan baik, tetapi skrip baharu memaparkannya menggunakan fon/charset pelik yang sama seperti pangkalan data
Jadi bila saya menaip???时,数据库存储的数据看起来像Ø1Ù...راÙ,当我在新脚本中获取它时,我看到Ø1Ù...راÙ但在旧脚本中我看到??
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');
Sebaliknya, apabila saya memasukkan???terus ke dalam pangkalan data
Sudah tentu, saya menyimpan perkara yang sama dalam pangkalan data???
Skrip baharu dipaparkan dengan sangat baik
Tapi dalam skrip lama saya dapat????
Bolehkah sesiapa memahami ini?
Ini enjin besar
https://github.com/maxxxir/mz-codeigniter-crud/blob/master/tuba.php
Contoh penggunaan skrip lama:
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 "ÎØÇ ! áØÝÇ ãÌÏøÏÇ ÊáÇÔ ˜äíÏ"; exit(); } for ($i = 0 ; $i < $db->Count() ; $i++) { $row = $db->Next(); var_dump($row); }
jawapan decezesangat bagus, tetapi saya boleh menambah beberapa maklumat yang mungkin membantu mengendalikan sejumlah besar rekod tanpa perlu mengujinya secara manual.
Jika anda menukar
CONVERT(BINARY CONVERT(field_name USING latin1) USING utf8)失败,则会打印NULL而不是field_namekandungan.Jadi saya menggunakan ini untuk mencari rekod tersebut:
Atau ini:
UPDATEdengan klausa ini hanya mempengaruhi rekod yang penukaran berjaya:Ringkasnya, kerana soalan ini telah dibincangkan seribu kali sebelum ini:
- PHP menyimpan rentetan, seperti
- Ia menghantar rentetan ini melalui
- Pangkalan data menerima bait
aksara.
Jadi masalah di sini ialah sambungan pangkalan data tidak disediakan dengan betul apabila data dimasukkan ke dalam pangkalan data. Anda perlu menukar data dalam pangkalan data kepada aksara yang betul. Cuba ini:"汉字",以 UTF-8 编码。该字节为E6 BC A2 E5 AD 97.latin1sambungan pangkalan data yang ditetapkan kepada.E6 BC A2 E5 AD 97,认为它们代表latin1E6 BC A2 E5 AD 97 dan menganggap ia mewakiliWatak storan pangkalan dataæ¡ ¡ ¿ Li>Proses yang sama secara terbalik menyebabkan PHP menerima bait yang sama dan kemudian menganggapnya sebagai UTF-8. Perjalanan pergi dan balik berfungsi dengan baik untuk PHP, walaupun pangkalan data tidak mengendalikan aksara seperti yang sepatutnya.utf8不是您所需要的,请尝试一下。如果有效,请将其更改为UPDATEMungkin utf8 bukan yang anda perlukan, sila cuba. Jika ia berfungsi, tukar kepada pernyataan KEMASKINI untuk mengemas kini data secara kekal.