Íàâèãàöèÿ

Ïîèñê ïî Ñàéòó

Ïàðòíåðû

Ñàìîó÷èòåëü. Êíèãè.

Ñòàòèñòèêà

Ñòðîêîâûé òèï ENUM â MySQL.

Ãëàâíàÿ Ñòðàíèöà » Êíèãè ïî PHP » MySQL óðîêè äëÿ íà÷èíàþùèõ ñ íóëÿ » Ñòðîêîâûé òèï ENUM

Òèï ENUM ïðåäñòàâëÿåò ñîáîé ñòðîêîâûé îáúåêò, çíà÷åíèå êîòîðîãî îáû÷íî âûáðàíî èç ñïèñêà äîïóñòèìûõ çíà÷åíèé, êîòîðûå ïåðå÷èñëåíû ÿâíî â ñïåöèôèêàöèè ñòîëáöà ïðè ñîçäàíèè òàáëèöû.

Çíà÷åíèå ìîæåò òàêæå áûòü ïóñòîé ñòðîêîé («») èëè NULL ïðè íåêîòîðûõ îáñòîÿòåëüñòâàõ:

  • åñëè âû âñòàâëÿåòå íåäîïóñòèìîå çíà÷åíèå â ENUM (òî åñòü ñòðîêó, êîòîðàÿ íå óêàçàíà â ïåðå÷íå äîïóñòèìûõ çíà÷åíèé), âçàìåí áóäåò âñòàâëåíà ïóñòàÿ ñòðîêà êàê ñïåöèàëüíîå çíà÷åíèå îøèáêè. Ýòà ñòðîêà ìîæåò îòëè÷àòüñÿ îò íîðìàëüíîé ïóñòîé ñòðîêè òåì, ÷òî îíà èìååò ÷èñëîâîå çíà÷åíèå 0. Ïîäðîáíåå îòíîñèòåëüíî ýòîãî ïîçæå;
  • åñëè ENUM îáúÿâëåí êàê NULL, òî NULL òàêæå ïðåäñòàâëÿåò ñîáîé äîïóñòèìîå çíà÷åíèå äëÿ ñòîëáöà, à çíà÷åíèåì ïî óìîë÷àíèþ êàê ðàç è áóäåò èìåííî NULL. Åñëè ENUM îáúÿâëåí êàê NOT NULL, çíà÷åíèåì ïî óìîë÷àíèþ áóäåò ïåðâûé ýëåìåíò èç ñïèñêà äîçâîëåííûõ çíà÷åíèé.

Êàæäîå çíà÷åíèå ïåðå÷èñëåíèÿ èìååò èíäåêñ:

  • âñå çíà÷åíèÿ èç ñïèñêà äîïóñòèìûõ ýëåìåíòîâ â ñïåöèôèêàöèè ñòîëáöà ïðîíóìåðîâàíû, íà÷èíàÿ ñ 1 (íå ñ 0!);
  • èíäåêñíîå çíà÷åíèå ïóñòîãî çíà÷åíèÿ îøèáêè 0. Ýòî îçíà÷àåò, ÷òî âû ìîæåòå èñïîëüçîâàòü ñëåäóþùóþ èíñòðóêöèþ SELECT, ÷òîáû íàéòè ñòðîêè, â êîòîðûõ áûëè óñòàíîâëåíû íåäîïóñòèìûå äëÿ ENUM çíà÷åíèÿ:
mysql> SELECT * FROM tbl_name WHERE enum_col = 0;
  • èíäåêñîì çíà÷åíèÿ NULL ÿâëÿåòñÿ ñàìî NULL.

Íàïðèìåð, ñòîëáåö, îïðåäåëåííûé êàê ENUM («one», «two», «three»), ìîæåò èìåòü ëþáîå èç çíà÷åíèé, ïðåäñòàâëåííûõ íèæå (ñì. òàáë. 5.4). Èíäåêñ êàæäîãî çíà÷åíèÿ òàêæå ïðåäñòàâëåí.

Òàáëèöà 5.4. Ïðèìåð äàííûõ äëÿ ñòîëáöà òèïà enum

Çíà÷åíèå Èíäåêñ
NULL NULL
«» 0
«one» 1
«two» 2
«three» 3

Ïåðå÷èñëåíèå ìîæåò èìåòü ìàêñèìóì 65535 ýëåìåíòîâ.

Ðåãèñòð íåâàæåí, êîãäà âû ïðèñâàèâàåòå çíà÷åíèÿ ñòîëáöó ENUM. Îäíàêî çíà÷åíèÿ, ïîëó÷åííûå èç ñòîëáöà, ïîçæå ïðèíèìàþò ðåãèñòð ñ ñîîòâåòñòâèåì çíà÷åíèé, èñïîëüçîâàííûõ, ÷òîáû îïðåäåëèòü äîïóñòèìûå çíà÷åíèÿ ïðè ñîçäàíèè äàííîé òàáëèöû. Òî åñòü, åñëè ïðè îïðåäåëåíèè ñòîëáöà áûëî çàäàíî çíà÷åíèå «Ðàç», à ïðè ïðèñâîåíèè çíà÷åíèÿ ïîëþ â òàáëèöå âû èñïîëüçîâàëè «ÐÀÇ», òî ñåðâåð âûäàñò âñå ðàâíî èìåííî «Ðàç», è íèêàê èíà÷å.

Åñëè âû ïîëó÷àåòå ENUM â ÷èñëîâîì êîíòåêñòå, òî áóäåò âîçâðàùåí èíäåêñ çíà÷åíèÿ ñòîëáöà. Íàïðèìåð, âû ìîæåòå ïîëó÷àòü ÷èñëîâûå çíà÷åíèÿ èç ñòîëáöà ENUM ïîäîáíî ýòîìó:

mysql> SELECT enum_col+0 FROM tbl_name;

To åñòü, åñëè âû îïðåäåëèëè ñòîëáåö êàê ENUM («Êðàñíûé», «Æåëòûé», «Çåë¸íûé»), òî â êîíòåêñòå ñòðîêè èìåííî òàêèå çíà÷åíèÿ è âåðíóòñÿ. Íî âîò ïðè îáðàùåíèè ê ýòîìó ñòîëáöó â êîíòåêñòå ÷èñëà ñîîòâåòñòâåííî âåðíóòñÿ èõ èíäåêñíûå ÷èñëà: 1, 2 è 3.

Çíà÷åíèÿ ENUM ñîðòèðóþòñÿ ñîãëàñíî ïîðÿäêó, â êîòîðîì ÷ëåíû ïåðå÷èñëåíèÿ áûëè óêàçàíû â ñïåöèôèêàöèè ñòîëáöà. Äðóãèìè ñëîâàìè, çíà÷åíèÿ ENUM ñîðòèðóþòñÿ ñîãëàñíî èõ èíäåêñíûì ÷èñëàì. Íàïðèìåð, «à» îêàæåòñÿ ïåðåä «b» äëÿ ENUM(«a»,«b»), íî «Ü» îïåðåäèò «à» äëÿ ENUM(«b», «à»). Ïóñòûå ñòðîêè îêàæóòñÿ ïåðåä çàïîëíåííûìè ñòðîêàìè, à çíà÷åíèÿ NULL ïåðåä âñåìè äðóãèìè çíà÷åíèÿìè ïåðå÷èñëåíèÿ.

Åñëè âû õîòèòå óçíàòü âñå âîçìîæíûå çíà÷åíèÿ äëÿ ñòîëáöà òèïà ENUM, âû äîëæíû èñïîëüçîâàòü êîìàíäó SHOW COLUMNS FROM table_name LIKE enum_column_name è ïðîàíàëèçèðîâàòü îïðåäåëåíèå ENUM âî âòîðîì ñòîëáöå âûâîäà.