1. Pangkalahatang-ideya ng Uri ng ENUM
Ano ang Uri ng ENUM?
Ang ENUM (enumeration) type sa MySQL ay isang data type na nag-iimbak ng eksaktong isang halaga mula sa isang nakatakdang listahan. Dahil tanging mga tiyak na nakatakdang string lamang ang maaaring i-save sa column, tinitiyak nito ang pagkakakonsistente ng data at pinipigilan ang pagpasok ng mga hindi wastong halaga.
Halimbawa, kapag pumipili ang isang gumagamit ng isang opsyon mula sa limitadong pagpipilian tulad ng kasarian o kategorya ng produkto, ang paggamit ng uri ng ENUM ay nag-aalis ng hindi kailangang lohika sa pag-check ng error. Ang sumusunod ay isang halimbawa ng paglikha ng talahanayan na may column na ENUM:
CREATE TABLE products (
id INT AUTO_INCREMENT PRIMARY KEY,
category ENUM('食品', '衣料品', '家電', '家具') NOT NULL
);
Sa halimbawang ito, ang category column ay maaaring mag-imbak lamang ng isa sa mga sumusunod na halaga: “食品”, “衣料品”, “家電”, o “家具”. Nakakatulong ito upang pasimplehin ang pamamahala ng data at bawasan ang panganib ng maling input.
Pangunahing Mga Kaso ng Paggamit ng ENUM
- Pamamahala ng status : Pagsubaybay sa mga yugto ng workflow tulad ng “未開始”, “進行中”, o “完了”.
- Pagpapakahulugan ng kategorya : Pamamahala ng mga nakatakdang opsyon tulad ng mga kategorya ng produkto, uri ng gumagamit, o posisyon sa trabaho.
- Pagraranggo o pag-grupo ng antas : Mga antas ng kahirapan sa laro (“初級”, “中級”, “上級”) o mga rating ng produkto (“良い”, “普通”, “悪い”).
2. Mga Bentahe at Disbentaha ng ENUM
Mga Bentahe
- Pinahusay na pagkakakonsistente ng data
Pinapayagan lamang ng ENUM ang mga halagang kasama sa nakatakdang listahan, na nagreresulta sa pare-parehong paghawak ng data. Halimbawa, kapag pinamamahalaan ang kasarian, tanging mga tinukoy na halaga tulad ng “男性” o “女性” ang pinapayagan, na pumipigil sa mga hindi wastong input. - Mabisang paggamit ng imbakan
Ang bawat halaga ng ENUM ay iniimbak sa loob bilang isang integer index. Bilang resulta, kumukonsumo ito ng mas kaunting espasyo kumpara sa VARCHAR. Halimbawa, ang mga halagang tulad ng ‘small’ o ‘large’ ay kumukonsumo ng mas maraming puwang bilang VARCHAR, ngunit iniimbak nang epektibo ng ENUM gamit ang mga numerong index.
Mga Disbentaha
- Kakulangan sa flexibility
Ang mga halaga ng ENUM ay nakapirmi. Ang pagdaragdag ng mga bagong opsyon ay nangangailangan ng pagbabago sa istruktura ng talahanayan, kaya hindi angkop ang ENUM para sa mga dataset na madalas magbago. - Masalimuot na paghawak ng error
Kapag may hindi wastong halaga na naipasok, maaaring maglabas ng error ang MySQL o mag-imbak ng walang laman na string. Maaari itong magpahirap sa pag-debug para sa mga developer.
3. Pag-configure ng ENUM at Praktikal na Paggamit
Pangunahing Setup at Paghawak ng Error
Upang i-configure ang isang uri ng ENUM, tukuyin lamang ang listahan ng mga wastong string. Ang sumusunod na halimbawa ay nagtatakda ng isang column na ENUM sa isang talahanayan:
CREATE TABLE shirts (
id INT AUTO_INCREMENT PRIMARY KEY,
size ENUM('XS', 'S', 'M', 'L', 'XL') NOT NULL
);
Sa halimbawang ito, ang size column ay tumatanggap lamang ng “XS”, “S”, “M”, “L”, o “XL”. Ang pagtatangkang magpasok ng halagang wala sa listahan (hal., ‘XXL’) ay magreresulta sa error na Data truncated. Pinipigilan nito ang hindi wastong data at pinapanatili ang pagkakakonsistente.
Halimbawa ng Praktikal na Paggamit
Ang sumusunod na halimbawa ay gumagamit ng ENUM upang pamahalaan ang mga role ng gumagamit tulad ng “管理者”, “一般ユーザー”, at “ゲスト”:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
role ENUM('管理者', '一般ユーザー', 'ゲスト') NOT NULL
);
Ang paggamit ng column na ENUM ay nagpapadali sa pagpapanatili ng pare-parehong mga pahintulot at kontrol batay sa role.

4. Pag-index at Paghawak ng NULL gamit ang ENUM
Paggamit ng mga Index
Ang mga halaga ng ENUM ay binibigyan ng integer index batay sa kanilang posisyon sa listahan. Halimbawa:
CREATE TABLE products (
id INT AUTO_INCREMENT PRIMARY KEY,
size ENUM('S', 'M', 'L', 'XL')
);
Ang “S” ay may index 1, ang “M” ay index 2, at iba pa. Maaaring gamitin ang mga index na ito sa mga WHERE clause:
SELECT * FROM products WHERE size = 2;
Ang query na ito ay kumukuha ng mga rekord kung saan ang size ay tumutugma sa “M”.
Paghawak ng NULL at Walang Laman na String
Kung pinapayagan ang NULL, maaaring mag-imbak ang column ng NULL bilang isang wastong estado kahit na wala ito sa listahan ng ENUM. Bukod pa rito, ang hindi wastong data na naipasok bilang walang laman na string ay iniimbak na may index 0, na ginagawang madali ang pagtuklas ng maling input.
5. Mga Character Set at Collation para sa ENUM
Paano Itakda ang mga Character Set at Collation
ENUM, tulad ng CHAR o VARCHAR, sumusuporta sa mga definisyon ng character set at collation. Ito ay mahalaga kapag hinahawakan ang multilingual data o mga operasyon ng pag-sort. Halimbawa:
CREATE TABLE documents (
id INT AUTO_INCREMENT PRIMARY KEY,
language ENUM('日本語', '英語', '中国語')
CHARACTER SET utf8
COLLATE utf8_general_ci
);
Ang halimbawang ito ay nagtutukoy ng UTF-8 at isang pangkalahatang layuning collation.
6. Pagpapalawak ng ENUM at Mga Alternatibo
Mga Teknik para sa Pagpapalawak ng ENUM
Dahil ang ENUM ay kulang sa flexibility para sa dynamic values, maaari mong isama ang isang “Other” option at i-store ang free-form input sa isang hiwalay na column:
ALTER TABLE products
MODIFY COLUMN category ENUM('食品', '衣料品', '家電', '家具', 'その他') NOT NULL,
ADD COLUMN category_other VARCHAR(255) DEFAULT NULL;
Ito ay nagbibigay-daan sa pag-iimbak ng mga value na hindi kasama sa listahan ng ENUM habang pinapanatili ang istraktura.
Mga Alternatibong Data Types: SET o VARCHAR
Depende sa mga kinakailangan, ang mga alternatibo ay kinabibilangan ng:
- SET type : Nag-iimbak ng maraming seleksyon mula sa isang listahan.
- VARCHAR : Nagbibigay ng maximum na flexibility nang walang predefined na mga hadlang.

