Íàâèãàöèÿ

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

Ïàðòíåðû

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

Ñòàòèñòèêà

Óðîê 5.14: Òðåáîâàíèÿ ñòîëáöîâ MySQL ê ïàìÿòè

Ãëàâíàÿ Ñòðàíèöà » Êíèãè ïî PHP » MySQL óðîêè äëÿ íà÷èíàþùèõ ñ íóëÿ » Òðåáîâàíèÿ ñòîëáöîâ MySQL ê ïàìÿòè

Âîò çäåñü íà÷èíàåòñÿ ñàìîå èíòåðåñíîå. Ñêîëüêî ïàìÿòè íóæíî äëÿ òîãî, ÷òîáû ñîõðàíèòü òî èëè èíîå çíà÷åíèå? Ýòî î÷åíü âàæíî, ïîòîìó ÷òî îøèáêà âñåãî íà îäèí áèò ïðèâåäåò ê ìíîãîìåãàáàéòíûì ïîòåðÿì íà áîëüøîé òàáëèöå: âåäü ýòîò ëèøíèé áèò ïîÿâèòñÿ â êàæäîé çàïèñè. Òðåáîâàíèÿ ê ïàìÿòè äëÿ êàæäîãî èç òèïîâ ñòîëáöîâ, ïîääåðæèâàåìûõ MySQL, ïåðå÷èñëåíû íèæå ñ ñîðòèðîâêîé ïî êàòåãîðèÿì.

Òèïû VARCHAR, BLOB è TEXT ïðåäñòàâëÿþò ñîáîé òèïû ïåðåìåííîé äëèíû, äëÿ êîòîðûõ òðåáîâàíèÿ ê ïàìÿòè çàâèñÿò îò ôàêòè÷åñêîé äëèíû çíà÷åíèÿ ñòîëáöà (ïðåäñòàâëåíà êàê L â ïîñëåäóþùèõ òàáëèöàõ). Íàïðèìåð, ñòîëáåö òèïà VARCHAR (10) ìîæåò õðàíèòü ñòðîêó ñ ìàêñèìàëüíîé äëèíîé â 10 ñèìâîëîâ. Ôàêòè÷åñêàÿ òðåáóåìàÿ ïàìÿòü ðàâíà äëèíå ñòðîêè (L) ïëþñ åùå 1 áàéò, ÷òîáû çàïèñàòü äëèíó ñòðîêè. Äëÿ ñòðîêè abed, L ðàâíî 4, à òðåáîâàíèÿ ê ïàìÿòè ðàâíû 5 áàéòàì.

Òèïû BLOB è TEXT òðåáóþò 1, 2, 3 èëè 4 áàéòà, ÷òîáû çàïèñàòü äëèíó çíà÷åíèÿ ñòîëáöà, â çàâèñèìîñòè îò ìàêñèìàëüíîé âîçìîæíîé äëèíû òèïà, à òàêæå ìåñòà ïîä ñàìî çíà÷åíèå (ñêîëüêî ïîíàäîáèòñÿ). Çàìåòèì, ÷òî ïî ïðè÷èíàì òåõíè÷åñêîãî ïëàíà, íà ñåãîäíÿøíèé äåíü â MySQL ìàêñèìàëüíàÿ äëèíà òèïîâ BLOB è TEXT îãðàíè÷åíà 16 ìåãàáàéòàìè, õîòÿ â áóäóùåì ýòî îãðàíè÷åíèå, âîçìîæíî, áóäåò ñíÿòî.

Åñëè òàáëèöà âêëþ÷àåò ëþáûå ñòîëáöû ïåðåìåííîé äëèíû, ôîðìàò çàïèñè áóäåò òàêæå ïåðåìåííîé äëèíû. Îáðàòèòå âíèìàíèå, ÷òî êîãäà òàáëèöà ñîçäàíà, MySQL ìîæåò, ïðè íåêîòîðûõ óñëîâèÿõ, òèõî è íåçàìåòíî èçìåíÿòü ñòîëáåö ñ òèïà ïåðåìåííîé äëèíû íà òèï ôèêñèðîâàííîé äëèíû. Âñå ïîäðîáíîñòè îá ýòîì ïðîöåññå ïðèâåäåíû â ðàçäåëå 7. «Ïîñòåïåííûå èçìåíåíèÿ ñïåöèôèêàöèè ñòîëáöà».

Ðàçìåð îáúåêòà ENUM îïðåäåëåí ÷èñëîì ðàçëè÷íûõ çíà÷åíèé ïåðå÷èñëåíèÿ. Îäèí áàéò èñïîëüçóåòñÿ äëÿ ïåðå÷èñëåíèÿ äî 255 âîçìîæíûõ çíà÷åíèé. Äâà áàéòà èñïîëüçóþòñÿ äëÿ ïåðå÷èñëåíèÿ äî 65535 çíà÷åíèé.

Ðàçìåð îáúåêòà SET òàêæå îïðåäåëåí ÷èñëîì ðàçëè÷íûõ ÷ëåíîâ íàáîðà. Åñëè ðàçìåð íàáîðà ðàâåí N, òî îáúåêò çàíèìàåò (N+7)/8 áàéò, îêðóãëåííûé äî 1, 2, 3, 4 èëè 8 áàéò â áîëüøóþ ñòîðîíó. Òèï SET ìîæåò èìåòü ìàêñèìóì äî 64 ÷ëåíîâ.

Òàáëèöà 5.7. Òðåáîâàíèÿ ê ïàìÿòè äëÿ ÷èñåë.

Òèï ñòîëáöà Äëÿ õðàíåíèÿ íàäî
TINYINT 1 áàéò
SMALLINT 2 áàéòà
MEDIUMINT 3 áàéòà
INT 4 áàéòà
INTEGER 4 áàéòà
BIGINT 8 áàéòà
FLOAT (X) 4, åñëè X <= 24, èëè 8, åñëè 25 <= X <= 53
FLOAT 4 áàéòà
DOUBLE 8 áàéòà
DOUBLE PRECISION 8 áàéòà
REAL 8 áàéòà
DECIMAL(M,D) Ì+2 áàéò, åñëè D > 0, Ì+1 áàéò, åñëè D=0 (D+2, åñëè Ì < D)
NUMERIC(M,D) Ì+2 áàéò, åñëè D > 0, Ì+1 áàéò, åñëè D=0 (D+2, åñëè Ì < D)

Òàáëèöà 5.8. Òðåáîâàíèÿ ê ïàìÿòè äëÿ äàòû è âðåìåíè

Òèï ñòîëáöà Äëÿ õðàíåíèÿ íàäî
DATE 3 áàéòà
DATETIME 8 áàéòà
TIMESTAMP 4 áàéòà
TIME 3 áàéòà
YEAR 1 áàéò
CHAR(M) Ì áàéò, 1 <= Ì <= 255
VARCHAR(Ì) L+1 áàéò, ãäå L<=Ì è 1 <= Ì <= 255
TINYTEXT, TINYBLOB L+1 áàéò, ãäå L < 2^8
BLOB, TEXT L+2 áàéò, ãäå L < 2^16
MEDIUMBLOB, MEDIUMTEXT L+3 áàéò, ãäå L < 2^24
LONGBLOB, LONGTEXT L+4 áàéò, ãäå L < 2^32
ENUM ("value1", 'value2', ...) 1 èëè 2 áàéòà, â çàâèñèìîñòè îò êîëè÷åñòâà çíà÷åíèé ïåðå÷èñëåíèÿ (ìàêñèìóì 65535 çíà÷åíèé)
SET ("value1", 'value2', ...) 1, 2, 3, 4 èëè 8 áàéò, â çàâèñèìîñòè îò ÷èñëà ÷ëåíîâ íàáîðà (ìàêñèìóì 64 ÷ëåíà)