Thursday, 20 November 2025

penyebab utama kenapa database di server CBT Anda menggunakan utf8mb4_unicode_ci,

 

 

Ya, betul sekali Guru Duan — itu penyebab utama kenapa database di server CBT Anda menggunakan utf8mb4_unicode_ci, sementara sumbernya (server SiM) memakai utf8mb4_general_ci.
Dan karena kedua server beda collation, begitu Moodle melakukan operasi JOIN/=``, muncul error:

Illegal mix of collations (utf8mb4_general_ci) and (utf8mb4_unicode_ci)

Jadi penyebabnya:

Saat instalasi server CBT, Anda membuat database Moodle dengan perintah:

CREATE DATABASE moodle DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Ini otomatis membuat seluruh default collation DB = unicode_ci.

Tetapi hasil restore dari server SiM mengandung tabel/kolom bawaan yang general_ci, sehingga sekarang database Anda bercampur:

  • sebagian utf8mb4_general_ci (tabel-tabel lama dari SiM)

  • sebagian utf8mb4_unicode_ci (default DB dan tabel baru dari Moodle/restore)

Saat query JOIN membandingkan kolom berbeda collation → error.


Apa yang harus dilakukan sekarang?

Supaya server CBT tidak error dan konsisten, pilih salah satu:


✔️ SOLUSI 1 (DIREKOMENDASIKAN)

Samakan semuanya ke utf8mb4_unicode_ci
Ini modern, akurat, dan standar Moodle terbaru.

Anda sudah menemukan tabel mana yang masih general_ci.
Langsung konversi:

ALTER TABLE mdl_config CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE mdl_config_plugins CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE mdl_local_jm_nilaiharian CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE mdl_local_jurnalguruwali CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE mdl_local_jurnalmengajar_suratizinguru CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE mdl_local_jurnalpembinaan CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE mdl_local_jurnalpramuka CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Setelah itu error akan hilang pasti.


✔️ SOLUSI 2 (ALTERNATIF)

Kalau Anda mau samakan ke general_ci (mengikuti server SiM):

  1. Ubah default collation database:

ALTER DATABASE moodle CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
  1. Konversi tabel-tabel yang unicode_cigeneral_ci.

🔴 Tapi ini tidak saya rekomendasikan karena Moodle modern lebih cocok unicode_ci, terutama untuk nama-nama siswa Indonesia yang memakai karakter unik atau aksen.


Mengapa server CBT Anda jadi unicode_ci?

Karena Anda mengikuti panduan pemasangan Moodle yang contoh kodenya:

CREATE DATABASE moodle ... COLLATE utf8mb4_unicode_ci;

Jadi DB baru = unicode, tetapi restore dump Anda membawa sebagian tabel lama = general.
Hasilnya campur → error saat JOIN.


Apakah lebih baik unicode atau general?

Untuk Moodle modern: unicode_ci lebih baik (lebih akurat sorting dan comparison).
Performa beda sangat kecil dan nyaris tidak terasa.

Kalau DB Anda kecil–menengah (di bawah 50 GB), pilihan terbaik adalah unicode_ci.


Jika Guru Duan mau, saya bisa:

  • Buatkan script SQL otomatis untuk mengubah semua tabel yang masih general → unicode

  • Atau buatkan script untuk ubah seluruh database (100%) unicode_ci

  • Atau lakukan pengecekan duplicate sebelum konversi

Tinggal bilang: “Buatkan script otomatisnya Guru".

 

Share:

0 comments:

Post a Comment