Kabar buruk. Tapi pertama-tama, periksa kembali:
SELECT col, HEX(col)...
untuk melihat apa yang ada di tabel. Jika hex menunjukkan 3F
, maka datanya hilang. Disimpan dengan benar, dal
karakter harus hex D8AF
; hah
adalah hex D8AD
.
Apa yang terjadi:
- Anda memiliki data yang disandikan utf8 (baik)
SET NAMES latin1
berlaku (default, tapi salah)- kolom dideklarasikan
CHARACTER SET latin1
(default, tapi salah)
Saat Anda INSERTed
data, itu dikonversi ke latin1, yang tidak memiliki nilai untuk karakter Farsi, jadi tanda tanya menggantikannya.
Obatnya (untuk `INSERT mendatang):
- Kode ulang aplikasi Anda menggunakan antarmuka mysqli_* alih-alih antarmuka mysql_* yang tidak digunakan lagi.
- data yang disandikan utf8 (baik)
- mysqli_set_charset('utf8')
- periksa apakah kolom dan/atau tabel default adalah
CHARACTER SET utf8
- Jika Anda menampilkan di halaman web,
<meta...utf8>
harus berada di dekat bagian atas.
Pembahasan di atas adalah tentang CHARACTER SET
, pengkodean karakter. Sekarang untuk tip tentang COLLATION
, yang digunakan untuk membandingkan dan menyortir.
Jika Anda ingin ini diperlakukan sama:'بِسْمِ' ='بسم', gunakan utf8_unicode_ci (bukan utf8_general_ci) untuk COLLATION
.