Mengatasi Unicode (UTF-8) Error pada Moodle

Memindahkan Moodle dari server A ke server B, atau mengupgrade Moodle ke versi terbaru, seharusnya adalah pekerjaan mudah. Untuk mengupgrade, cukup kosongkan folder http atau htdocs kecuali sisakan satu file saja yaitu config.php, kemudian file Moodle versi terbaru di-extract ke folder tersebut. Sedangkan untuk memindahkan Moodle ke server lain, bila nama domainnya masih sama maka yang perlu dipindahkan adalah seluruh database (gunakan perintah mysqldump) dan 2 folder yaitu moodledata dan folder http atau htdocs.

Sebagai admin di SMK Negeri 1 dan SMK PGRI 1, pekerjaan di atas sudah saya kerjakan sejak bertahun-tahun lalu. Namun dua pekan yang lalu, saya menemui masalah yang hampir-hampir membuat saya putus asa.

Setelah proses upgrade hampir selesai, muncul pesan error seperti ini:

“It is required that you store all your data in Unicode format (UTF-8). New installations must be performed into databases that have their default character set as Unicode. If you are upgrading, you should perform the UTF-8 migration process (see the Admin page).”

Bila masalah unicode ini tidak diselesaikan, Moodle menolak berfungsi. Tidak ada tombol Next atau Ignore. Pokoknya harus diselesaikan dulu. Pusing kan?

Setelah melakukan percobaan dan gagal berkali-kali, akhirnya saya mendapat solusinya.

Langkah pertama:
Pastikan anda sudah melakukan backup, terutama pada database. Kerusakan yang terjadi karena mengikuti artikel ini bukan tanggung jawab saya.

Langkah ke-2:
Edit /etc/my.cnf (CentOS) atau /etc/mysql/my.cnf (Ubuntu) lalu ubah menjadi seperti di bawah ini.

[client]
default-character-set = utf8mb4

[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
innodb_file_format = Barracuda
innodb_file_per_table = 1
# innodb_large_prefix
# skip-character-set-client-handshake

[mysql]
default-character-set = utf8mb4

Langkah ke-2:
Buat database baru (belum berisi tabel). Atau boleh juga menggunakan database lama tapi tabel-tabelnya harus dihapus. Jangan lupa lakukan backup lebih dulu.
Lalu dengan menggunakan PHPMyAdmin, ubah Collation-nya menjadi utf8mb4_unicode_ci.

Langkah ke 3:
Edit file hasil mysqldump. Bisa menggunakan editor teks misalnya Sublime Text atau Nano, kemudian hapus seluruh teks DEFAULT CHARSET=utf8. Gunakan saja Find and Replace agar cepat. Mengapa harus dihapus? Saya pernah mencoba menggantinya dengan DEFAULT CHARSET=utf8mb4_unicode_ci tapi ketika database diimport, muncul pesan error yang menyatakan charset tersebut tidak dikenal. Yowis, dihapus saja. Bukankah database di langkah pertama sudah dibuat defaultnya yaitu utf8mb4_unicode_ci?

Langkah ke 4:
Lakukan import database. Bisa menggunakan perintah mysql -unamapengguna -p namadatabase < backup.sql bisa juga menggunakan menu import yang ada di PHPMyAdmin.

Pastikan hasil dari proses import ini, semua tabel collation-nya adalah utf8mb4_unicode_ci seperti tampak pada gambar di bawah ini.

Langkah ke 5:
Ini yang penting. Saya sempat luput menempuh langkah ini sehingga errornya tetap muncul. Buka file config.php yang ada di folder Moodle lalu ubah menjadi seperti ini

$CFG->dboptions = array (
  'dbpersist' => 0,
  'dbport' => '',
  'dbsocket' => '',
  'dbcollation' => 'utf8mb4_unicode_ci',
);

Langkah ke 6:
Dengan menggunakan peramban (web browser), bukan Moodle lalu ikuti proses upgrade database. Seharusnya lancar dan Moodle siap digunakan.

Web Hosting

Leave a Reply