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 Arab (Kurdi/Farsi/dll), jadi tanda tanya menggantikannya.
Obatnya (untuk INSERTs
di masa mendatang ):
- data yang disandikan utf8 (baik)
mysqli_set_charset('utf8')
(atau apa pun yang dibutuhkan klien Anda untuk membuatCHARACTER SET
)- 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.
Untuk memeriksa kembali apakah data disimpan dengan benar, lakukanSELECT col, HEX(col)...
.هرچوون
harus kembali D987E2808CD8B1DA86D988D988D986
Karakter arab di utf8 memiliki hex D8xx atau D9xx.
(utf8mb4
berfungsi sebaik utf8
; baik untuk bahasa Arab.)
Berita buruk:Data yang dimasukkan dan diubah menjadi '???' tidak dapat dipulihkan.