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):
-
Ubah default collation database:
ALTER DATABASE moodle CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
-
Konversi tabel-tabel yang
unicode_ci→general_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".
0 comments:
Post a Comment