1. Gambaran Umum Tipe ENUM
Apa Itu Tipe ENUM?
Tipe ENUM (enumerasi) di MySQL adalah tipe data yang menyimpan tepat satu nilai dari daftar yang telah ditentukan sebelumnya. Karena hanya string yang telah didefinisikan yang dapat disimpan di kolom, tipe ini memastikan konsistensi data dan mencegah nilai tidak valid masuk.
Sebagai contoh, ketika pengguna memilih satu opsi dari pilihan terbatas seperti jenis kelamin atau kategori produk, penggunaan tipe ENUM menghilangkan kebutuhan logika pemeriksaan error yang tidak perlu. Berikut adalah contoh pembuatan tabel yang berisi kolom ENUM:
CREATE TABLE products (
id INT AUTO_INCREMENT PRIMARY KEY,
category ENUM('食品', '衣料品', '家電', '家具') NOT NULL
);
Dalam contoh ini, kolom category hanya dapat menyimpan salah satu dari nilai berikut: “食品”, “衣料品”, “家電”, atau “家具”. Hal ini membantu menyederhanakan manajemen data dan mengurangi risiko input yang salah.
Kasus Penggunaan Utama ENUM
Tipe ENUM biasanya dipakai dalam skenario seperti:
- Manajemen status : Melacak tahapan alur kerja seperti “未開始”, “進行中”, atau “完了”.
- Definisi kategori : Mengelola opsi yang telah ditentukan sebelumnya seperti kategori produk, tipe pengguna, atau jabatan pekerjaan.
- Pengelompokan peringkat atau level : Tingkat kesulitan game (“初級”, “中級”, “上級”) atau rating produk (“良い”, “普通”, “悪い”).
2. Keuntungan dan Kerugian ENUM
Keuntungan
- Konsistensi data yang lebih baik
ENUM hanya memperbolehkan nilai yang termasuk dalam daftar yang telah ditentukan, sehingga penanganan data menjadi konsisten. Misalnya, saat mengelola jenis kelamin, hanya nilai yang didefinisikan seperti “男性” atau “女性” yang diizinkan, sehingga mencegah input tidak valid. - Penggunaan penyimpanan yang efisien
Setiap nilai ENUM disimpan secara internal sebagai indeks integer. Akibatnya, ia memakan ruang penyimpanan lebih sedikit dibandingkan VARCHAR. Contohnya, nilai seperti ‘small’ atau ‘large’ memakan lebih banyak ruang sebagai VARCHAR, tetapi ENUM menyimpannya secara efisien menggunakan indeks numerik.
Kerugian
- Kurang fleksibel
Nilai ENUM bersifat tetap. Menambahkan opsi baru memerlukan perubahan struktur tabel, sehingga ENUM tidak cocok untuk dataset yang sering berubah. - Penanganan error yang kompleks
Jika nilai tidak valid dimasukkan, MySQL dapat menghasilkan error atau menyimpan string kosong. Hal ini dapat mempersulit proses debugging bagi pengembang.
3. Mengonfigurasi ENUM dan Penggunaan Praktis
Pengaturan Dasar dan Penanganan Error
Untuk mengonfigurasi tipe ENUM, cukup definisikan daftar string yang valid. Contoh berikut mendefinisikan kolom ENUM dalam sebuah tabel:
CREATE TABLE shirts (
id INT AUTO_INCREMENT PRIMARY KEY,
size ENUM('XS', 'S', 'M', 'L', 'XL') NOT NULL
);
Di sini, kolom size hanya menerima “XS”, “S”, “M”, “L”, atau “XL”. Mencoba memasukkan nilai yang tidak ada dalam daftar (misalnya ‘XXL’) akan menghasilkan error Data truncated. Ini mencegah data tidak valid dan menjaga konsistensi.
Contoh Penggunaan Praktis
Contoh berikut menggunakan ENUM untuk mengelola peran pengguna seperti “管理者”, “一般ユーザー”, dan “ゲスト”:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
role ENUM('管理者', '一般ユーザー', 'ゲスト') NOT NULL
);
Menggunakan kolom ENUM memudahkan pemeliharaan izin yang konsisten serta kontrol berbasis peran.

4. Pengindeksan dan Penanganan NULL dengan ENUM
Menggunakan Indeks
Nilai ENUM diberikan indeks integer berdasarkan posisinya dalam daftar. Sebagai contoh:
CREATE TABLE products (
id INT AUTO_INCREMENT PRIMARY KEY,
size ENUM('S', 'M', 'L', 'XL')
);
“S” memiliki indeks 1, “M” indeks 2, dan seterusnya. Indeks-indeks ini dapat digunakan dalam klausa WHERE:
SELECT * FROM products WHERE size = 2;
Kueri ini mengambil baris di mana ukuran sesuai dengan “M”.
Penanganan NULL dan String Kosong
Jika NULL diizinkan, kolom dapat menyimpan NULL sebagai keadaan yang valid meskipun tidak ada dalam daftar ENUM. Selain itu, data tidak valid yang dimasukkan sebagai string kosong akan disimpan dengan indeks 0, sehingga input yang salah mudah terdeteksi.
5. Set Karakter dan Kolasi untuk ENUM
Cara Menetapkan Set Karakter dan Kolasi
ENUM, seperti CHAR atau VARCHAR, mendukung definisi set karakter dan kolasi. Ini penting saat menangani data multibahasa atau operasi pengurutan. Contoh:
CREATE TABLE documents (
id INT AUTO_INCREMENT PRIMARY KEY,
language ENUM('日本語', '英語', '中国語')
CHARACTER SET utf8
COLLATE utf8_general_ci
);
Contoh ini8 dan kolasi tujuan umum.
6. Memperluas ENUM dan Alternatif
Teknik untuk Memperluas ENUM
Karena ENUM tidak memiliki fleksibilitas untuk nilai dinamis, Anda dapat menyertakan opsi “Lainnya” dan menyimpan input bebas dalam kolom terpisah:
ALTER TABLE products
MODIFY COLUMN category ENUM('食品', '衣料品', '家電', '家具', 'その他') NOT NULL,
ADD COLUMN category_other VARCHAR(255) DEFAULT NULL;
Ini memungkinkan penyimpanan nilai yang tidak termasuk dalam daftar ENUM sambil mempertahankan struktur.
Tipe Data Alternatif: SET atau VARCHAR
Bergantung pada kebutuhan, alternatif meliputi:
- Tipe SET : Menyimpan beberapa pilihan dari sebuah daftar.
- VARCHAR : Menawarkan fleksibilitas maksimum tanpa batasan yang telah ditentukan.


