Dalam bidang penyimpanan dan pengambilan data, bukan perkara biasa untuk menghadapi tingkah laku yang tidak dijangka semasa bekerja dengan sistem yang berbeza. Begitulah keadaannya dengan percanggahan pengekodan yang membingungkan yang dihadapi oleh pembangun yang cuba memindahkan data daripada skrip lama kepada skrip baharu.
Masalahnya: Watak Bercelaru
Pemaju menghadapi isu pelik: aksara Parsi yang dikodkan menggunakan UTF-8 dalam skrip lama muncul sebagai teks bercelaru apabila menggunakan skrip baharu, malah walaupun kedua-dua skrip kononnya menggunakan set aksara yang sama (UTF-8).
Suspek: Konfigurasi Pangkalan Data
Usaha penyelesaian masalah awal tertumpu pada tetapan pangkalan data. Skrip lama menggunakan enjin pangkalan data tersuai, manakala skrip baharu menggunakan MySQL. Untuk memastikan keserasian, pembangun mengesahkan bahawa set aksara dan pengumpulan untuk pangkalan data MySQL telah ditetapkan kepada UTF-8 dan UTF-8_persian_ci, masing-masing.
Gelagat Pelik
Walaupun menetapkan set aksara dan himpunan yang betul, percanggahan itu berterusan. Skrip lama terus memaparkan aksara Parsi dengan betul, manakala skrip baharu masih menunjukkan teks bercelaru.
Punca Punca: Kecelakaan Sambungan
Selepas mendalami isu tersebut , pembangun menemui perincian yang halus tetapi penting: sambungan pangkalan data yang digunakan oleh skrip lama telah ditetapkan kepada Latin1. Tetapan yang nampaknya tidak berbahaya ini mempunyai implikasi yang ketara untuk pengekodan data.
Bagaimana Ia Berlaku
Apabila data pada mulanya dimasukkan ke dalam pangkalan data menggunakan skrip lama, PHP menghantar rentetan dikodkan UTF-8 ke pangkalan data. Memandangkan sambungan ditetapkan kepada Latin1, pangkalan data mentafsirkan bait yang mewakili aksara Parsi sebagai nilai Latin1. Akibatnya, aksara telah disimpan dalam pangkalan data dalam pengekodan yang salah.
Penyelesaian: Penukaran Pangkalan Data
Untuk menyelesaikan ralat ukiran, pembangun terpaksa menukar data dalam pangkalan data ke format UTF-8 yang betul. Ini boleh dicapai menggunakan pernyataan SQL berikut:
SELECT CONVERT(BINARY CONVERT(field_name USING latin1) USING utf8) FROM table_name
Setelah penukaran selesai, aksara Parsi disimpan dalam pangkalan data dalam pengekodan UTF-8 yang betul. Skrip baharu kini boleh mendapatkan semula dan memaparkan data dengan betul, sepadan dengan output skrip lama.
Atas ialah kandungan terperinci Mengapa Aksara Parsi Saya Bercelaru Apabila Memindahkan Data daripada Skrip Lama ke MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!