Memahami Tipe Data ENUM di MySQL: Panduan Lengkap dengan Contoh

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

  1. 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.
  2. 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

  1. Kurang fleksibel
    Nilai ENUM bersifat tetap. Menambahkan opsi baru memerlukan perubahan struktur tabel, sehingga ENUM tidak cocok untuk dataset yang sering berubah.
  2. 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.