Ñòðîêîâûå òèïû BLOB è TEXT â MySQL.
Ãëàâíàÿ Ñòðàíèöà » Êíèãè ïî PHP » MySQL óðîêè äëÿ íà÷èíàþùèõ ñ íóëÿ » Ñòðîêîâûå òèïû BLOB è TEXT
Òèï BLOB ïðåäñòàâëÿåò ñîáîé äâîè÷íûé áîëüøîé îáúåêò, êîòîðûé ìîæåò õðàíèòü ïåðåìåííîå êîëè÷åñòâî äàííûõ. Ýòî óíèâåðñàëüíûé òèï äàííûõ, êîòîðûé ïðåäíàçíà÷åí äëÿ õðàíåíèÿ ëþáîé èíôîðìàöèè. Åñëè äðóãèå òèïû ñîçäàíû è îïòèìèçèðîâàíû ïîä êîíêðåòíûå òèïû äàííûõ, òî ýòîò ìîæåò îäèíàêîâî õîðîøî õðàíèòü ÷òî óãîäíî.
Åñòü ÷åòûðå òèïà BLOB'îâ: TINYBLOB, BLOB, MEDIUMBLOB è LONGBLOB, îòëè÷àþùèåñÿ òîëüêî ïî ìàêñèìàëüíîé äëèíå çíà÷åíèé, êîòîðûå îíè ìîãóò õðàíèòü.
×åòûðå òèïà TEXT: TINYTEXT, TEXT, MEDIUMTEXT è LONGTEXT ñîîòâåòñòâóþò ÷åòûðåì òèïàì BLOB è èìåþò òå æå ñàìûå ìàêñèìàëüíûå äëèíû è òðåáîâàíèÿ ê ïàìÿòè (èìåííî ïîýòîìó îíè è ðàññìàòðèâàþòñÿ â îäíîì ïîäðàçäåëå). Åäèíñòâåííîå ðàçëè÷èå ìåæäó òèïàìè BLOB è TEXT â òîì, ÷òî ñîðòèðîâêà âûïîëíÿåòñÿ ñ ó÷åòîì ðåãèñòðà äëÿ çíà÷åíèé òèïà BLOB è áåç ó÷åòà ðåãèñòðà äëÿ TEXT.
Åñëè âû ïðèñâàèâàåòå ñòîëáöó BLOB èëè TEXT çíà÷åíèå, êîòîðîå ïðåâûøàåò ìàêñèìàëüíóþ äëèíó äëÿ òèïà ñòîëáöà, çíà÷åíèå áóäåò óñå÷åíî, ÷òîáû ïîìåñòèòüñÿ â ñòîëáåö.
 áîëüøèíñòâå ñëó÷àåâ âû ìîæåòå ðàñöåíèâàòü ñòîëáåö TEXT êàê VARCHAR, êîòîðûé ìîæåò áûòü íàñòîëüêî âåëèê, íàñêîëüêî õîòèòå. Òî÷íî òàê æå âû ìîæåòå ðàñöåíèâàòü ñòîëáåö BLOB êàê VARCHAR BINARY. Ðàçëè÷èÿ â òîì, ÷òî:
- ïðîáåëû äëÿ BLOB è TEXT íå óäàëÿþòñÿ, êîãäà çíà÷åíèÿ ñîõðàíåíû, â ïðîòèâîïîëîæíîñòü VARCHAR;
- ñòîëáöû òèïîâ BLOB è TEXT íå ìîãóò èìåòü çíà÷åíèé ïî óìîë÷àíèþ (ïàðàìåòð DEFAULT).
Ïîñêîëüêó çíà÷åíèÿ BLOB è TEXT ìîãóò áûòü ÷ðåçâû÷àéíî äëèííûìè, âû ìîæåòå ñòîëêíóòüñÿ ñ îãðàíè÷åíèÿìè ïðè èõ èñïîëüçîâàíèè:
- åñëè âû õîòèòå èñïîëüçîâàòü èíñòðóêöèþ GROUP BY èëè ORDER BY íà ñòîëáöå òèïà BLOB èëè TEXT, âû äîëæíû ïðåîáðàçîâàòü çíà÷åíèå ñòîëáöà â îáúåêò ôèêñèðîâàííîé äëèíû. Ñòàíäàðòíûé ñïîñîá ñäåëàòü ýòî: ôóíêöèÿ SUBSTRING, íàïðèìåð:
mysql> select comment from tbl_name, substring(comment, 20) as substr
ORDER BY substr;
Åñëè âû íå ñäåëàåòå ýòîãî, òîëüêî ïåðâûå max_sort_length áàéò ñòîëáöà èñïîëüçóþòñÿ ïðè ñîðòèðîâêå. Çíà÷åíèå ïî óìîë÷àíèþ äëÿ max_sort_length ðàâíî 1024, ýòî çíà÷åíèå ìîæåò áûòü èçìåíåíî ñ èñïîëüçîâàíèåì îïöèè -Î ïðè çàïóñêå ñåðâåðà mysqld. Âû ìîæåòå ãðóïïèðîâàòü äàííûå íà âûðàæåíèè, âêëþ÷àþùåì çíà÷åíèÿ BLOB èëè TEXT, îïðåäåëÿÿ ïîçèöèþ ñòîëáöà èëè èñïîëüçóÿ ïñåâäîíèì:
mysql> select id,substring(blob_col,1,100) from tbl_name GROUP BY 2;
mysql> select id,substring(blob_col,1,100) as b from tbl_name GROUP BY b;
- ìàêñèìàëüíûé ðàçìåð îáúåêòà BLOB èëè TEXT îïðåäåëåí òèïîì, íî ñàìîå áîëüøîå çíà÷åíèå, êîòîðîå âû ìîæåòå ôàêòè÷åñêè ïåðåäàòü ìåæäó êëèåíòîì è ñåðâåðîì, çàâèñèò îò êîëè÷åñòâà äîñòóïíîé ïàìÿòè è ðàçìåðà áóôåðîâ ñâÿçè. Âû ìîæåòå èçìåíÿòü ðàçìåð áóôåðà ñîîáùåíèÿ, íî äîëæíû ñäåëàòü ýòî íà êëèåíòå è íà ñåðâåðå îäíîâðåìåííî.



