Gunakan mysqli_set_charset
untuk mengubah pengkodean klien ke UTF-8 tepat setelah Anda terhubung:
$mysqli->set_charset("utf8");
Encoding klien adalah apa yang MySql harapkan dari input Anda (mis. ketika Anda memasukkan teks yang disediakan pengguna ke kueri pencarian) dan apa yang memberi Anda hasilnya (sehingga harus cocok dengan pengkodean output Anda agar echo
untuk menampilkan sesuatu dengan benar).
Anda harus mencocokkannya dengan penyandian halaman web Anda untuk memperhitungkan dua skenario di atas dan pengkodean file sumber PHP (sehingga bagian hardcode dari kueri Anda ditafsirkan dengan benar).
Pembaruan:Cara mengonversi data yang disisipkan menggunakan latin-1 ke utf-8
Mengenai data yang telah dimasukkan menggunakan penyandian koneksi yang salah, ada solusi yang mudah untuk memperbaiki masalah tersebut. Untuk setiap kolom yang berisi data semacam ini, Anda perlu melakukan:
ALTER TABLE table_name MODIFY column_name existing_column_type CHARACTER SET latin1;
ALTER TABLE table_name MODIFY column_name BLOB;
ALTER TABLE table_name MODIFY column_name existing_column_type CHARACTER SET utf8;
Placeholder table_name
, column_name
dan existing_column_type
harus diganti dengan nilai yang benar dari database Anda setiap saat.
Apa yang dilakukannya adalah
- Beri tahu MySql bahwa ia perlu menyimpan data di kolom itu dalam bahasa latin1. Kumpulan karakter ini hanya berisi sebagian kecil dari utf8 jadi secara umum konversi ini melibatkan kehilangan data, tetapi dalam skenario khusus ini data sudah ditafsirkan sebagai latin1 pada input sehingga tidak akan ada efek samping. Namun, MySql akan secara internal mengonversi representasi byte data Anda agar sesuai dengan apa yang awalnya dikirim dari PHP.
- Konversi kolom ke tipe biner (
BLOB
) yang tidak memiliki informasi enkode terkait. Pada titik ini kolom akan berisi byte mentah yang merupakan string karakter utf8 yang tepat. - Konversikan kolom ke tipe karakter sebelumnya, dengan memberi tahu MySql bahwa byte mentah harus dianggap dalam pengkodean utf8.
PERINGATAN:Anda hanya dapat menggunakan pendekatan sembarangan ini jika kolom yang dimaksud berisi hanya salah memasukkan data. Setiap data yang telah dimasukkan dengan benar akan terpotong pada kemunculan pertama karakter non-ASCII!
Oleh karena itu, sebaiknya lakukan sekarang, sebelum perbaikan sisi PHP berlaku.