Sayangnya, phpMyAdmin adalah salah satu aplikasi php pertama yang berbicara dengan MySQL tentang charset dengan benar. Masalah Anda kemungkinan besar disebabkan oleh fakta bahwa database tidak menyimpan string UTF-8 yang benar pada awalnya.
Untuk menampilkan karakter dengan benar di phpMyAdmin, data harus disimpan dengan benar di database. Namun, mengubah database menjadi rangkaian karakter yang benar sering kali merusak aplikasi web yang tidak mengetahui fitur terkait rangkaian karakter yang disediakan oleh MySQL.
Bolehkah saya bertanya:apakah MySQL> versi 4.1? Untuk aplikasi web apa database itu? phpBB? Apakah database dimigrasikan dari versi aplikasi web yang lebih lama, atau versi MySQL yang lebih lama?
Saran saya jangan abang jika web app yang anda gunakan terlalu lama dan tidak support. Hanya konversi database ke UTF-8 asli jika Anda yakin aplikasi web dapat membacanya dengan benar.
Sunting:
MySQL Anda> 4.1, itu artinya charset-aware. Apa pengaturan susunan charset untuk database Anda? Saya cukup yakin Anda menggunakan latin1
, yang merupakan nama MySQL untuk ASCII, untuk menyimpan teks UTF-8 dalam 'byte', ke dalam database.
Untuk klien yang tidak peka terhadap karakter (mis. mysql-cli dan php-mod-mysql), karakter ditampilkan dengan benar karena sedang ditransfer ke/dari database sebagai byte. Di phpMyAdmin, byte dibaca dan ditampilkan sebagai karakter ASCII, seperti itulah teks sampah yang Anda lihat.
Tak terhitung jam telah dihabiskan bertahun-tahun yang lalu (2005?) ketika MySQL 4.0 menjadi usang, di banyak bagian Asia. Ada cara standar untuk mengatasi masalah Anda dan data yang tertelan:
- Cadangkan database Anda sebagai
.sql
- Buka di editor teks berkemampuan UTF-8, pastikan tampilannya benar.
- Cari
charset collation latin1_general_ci
, gantilatin1
keutf8
. - Simpan sebagai file sql baru, jangan timpa cadangan Anda
- Impor file baru, mereka sekarang akan terlihat benar di phpMyAdmin, dan bahasa Jepang di aplikasi web Anda akan menjadi tanda tanya. Itu normal.
- Untuk aplikasi web php Anda yang mengandalkan php-mod-mysql, masukkan
mysql_query("SET NAMES UTF8");
setelahmysql_connect()
, sekarang tanda tanya akan hilang. -
Tambahkan konfigurasi berikut
my.ini
untuk mysql-cli:# CLIENT SECTION [mysql] default-character-set=utf8 # SERVER SECTION [mysqld] default-character-set=utf8
Untuk informasi lebih lanjut tentang charset di MySQL, silakan merujuk ke manual: http://dev.mysql.com/doc/refman/5.0/en/charset-server.html
Perhatikan bahwa saya menganggap aplikasi web Anda menggunakan php-mod-mysql untuk terhubung ke database (karenanya mysql_connect()
function), karena php-mod-mysql adalah satu-satunya ekstensi yang dapat saya pikirkan yang masih memicu masalah HARI INI.
phpMyAdmin menggunakan php-mod-mysqli untuk terhubung ke MySQL. Saya tidak pernah belajar bagaimana menggunakannya karena beralih ke kerangka kerja* untuk mengembangkan proyek php saya. Saya sangat menganjurkan Anda melakukannya juga.
- Banyak kerangka kerja, mis. CodeIgniter, Zend, gunakan mysqli atau pdo untuk terhubung ke database. fungsi mod-mysql dianggap usang karena masalah kinerja dan skalabilitas. Selain itu, Anda tidak ingin mengikat proyek Anda ke tipe database tertentu.