Òèïû äàòû è âðåìåíè â MySQL
Ãëàâíàÿ Ñòðàíèöà » Êíèãè ïî PHP » MySQL óðîêè äëÿ íà÷èíàþùèõ ñ íóëÿ » Òèïû äàòû è âðåìåíè â MySQL
 ýòîì ðàçäåëå ðàññìàòðèâàþòñÿ òèïû äëÿ õðàíåíèÿ äàòû è âðåìåíè: DATETIME, DATE, TIMESTAMP, TIME è YEAR. Ýòî î÷åíü ñëîæíàÿ òåìà, â îñíîâíîì ïîòîìó, ÷òî â öåëÿõ îïòèìàëüíîé ðàáîòû ñ òàêèì âàæíûì ïîíÿòèåì, êàê âðåìÿ, â MySQL ââåäåíî íåìàëî ðàçíûõ òèïîâ äàííûõ (è ïîäâîäíûõ êàìíåé â íèõ). Áóäüòå âíèìàòåëüíû, êàê ïðè ÷òåíèè ãëàâû, òàê è ïðè ðàáîòå ñ ðåàëüíûìè äàííûìè!
Êàæäûé èç ýòèõ òèïîâ èìååò äèàïàçîí äîïóñòèìûõ çíà÷åíèé, òàêæå êàê è íåêèé íîëü, êîòîðûé èñïîëüçóåòñÿ, êîãäà âû îïðåäåëÿåòå äåéñòâèòåëüíî çàïðåùåííîå çíà÷åíèå. Îáðàòèòå âíèìàíèå, ÷òî MySQL ïîçâîëÿåò ñîõðàíÿòü íåêîòîðûå íåäîïóñòèìûå çíà÷åíèÿ äàòû, íàïðèìåð 1999-11-31. Ïðè÷èíà â òîì, ÷òî îáðàáàòûâàòü ïðîâåðêó äàòû - îòâåòñòâåííîñòü ïðèêëàäíîé ïðîãðàììû, à íå ñåðâåðà SQL.
Äëÿ îñîáîé áûñòðîòû ïðîâåðêè äàòû, MySQL ïðîâåðÿåò òîëüêî òî, ÷òî ìåñÿö íàõîäèòñÿ â äèàïàçîíå 0-12, è äåíü íàõîäèòñÿ â äèàïàçîíå 0-31. Âûøåóïîìÿíóòûå äèàïàçîíû îïðåäåëåíû òàê ïîòîìó, ÷òî MySQL ïîçâîëÿåò ñîõðàíÿòü â ñòîëáöàõ DATE èëè DATETIME äàòû, â êîòîðûõ äåíü èëè ìåñÿö íóëåâîé.
Ýòî ÷ðåçâû÷àéíî ïîëåçíî äëÿ ïðèêëàäíûõ ïðîãðàìì, êîòîðûå äîëæíû ñîõðàíèòü äàòó ðîæäåíèÿ, êîòîðîé âû íå çíàåòå.  ýòîì ñëó÷àå âû ïðîñòî ñîõðàíÿåòå äàòó ïîäîáíî 1999-00-00 èëè 1999-01-00.
Èìåþòñÿ íåêîòîðûå îáùèå âåùè, êîòîðûå ñòîèò èìåòü â âèäó ïðè ðàáîòå ñ òèïàìè äàòû è âðåìåíè:
- MySQL âîçâðàùàåò çíà÷åíèÿ äëÿ äàííîãî òèïà â ñòàíäàðòíîì ôîðìàòå, íî ïûòàåòñÿ èíòåðïðåòèðîâàòü ðÿä ôîðìàòîâ äëÿ çíà÷åíèé, êîòîðûå âû îáåñïå÷èâàåòå (íàïðèìåð, êîãäà âû îïðåäåëÿåòå çíà÷åíèå, êîòîðîå áóäåò íàçíà÷åíî ïåðåìåííîé èëè ñðàâíèâàòüñÿ). Îäíàêî ïîääåðæàíû òîëüêî ôîðìàòû, îïèñàííûå â ñëåäóþùèõ ðàçäåëàõ. Îæèäàåòñÿ, ÷òî âû îáåñïå÷èòå äîïóñòèìûå çíà÷åíèÿ, è íåïðåäñêàçóåìûå ðåçóëüòàòû ìîãóò áûòü ïîëó÷åíû, åñëè âû èñïîëüçóåòå çíà÷åíèÿ â äðóãèõ ôîðìàòàõ. Ïðîâåðêà ïðàâèëüíîñòè çíà÷åíèé âîçëîæåíà íà âàñ;
- Õîòÿ MySQL ïðîáóåò èíòåðïðåòèðîâàòü çíà÷åíèÿ â íåñêîëüêèõ ôîðìàòàõ, îí âñåãäà îæèäàåò, ÷òî ãîä íàõîäèòñÿ ñ ëåâîãî êðàÿ. Äàòû äîëæíû áûòü çàäàíû òîëüêî â ïîðÿäêå ãîä-ìåñÿö-äåíü (íàïðèìåð, 98-09-04);
- MySQL àâòîìàòè÷åñêè ïðåîáðàçóåò çíà÷åíèÿ äàòû è âðåìåíè â ÷èñëà, åñëè çíà÷åíèå èñïîëüçóåòñÿ â ÷èñëîâîì êîíòåêñòå, è íàîáîðîò;
- Êîãäà MySQL ñòàëêèâàåòñÿ ñî çíà÷åíèåì, êîòîðîå íàõîäèòñÿ âíå äèàïàçîíà èëè çàïðåùåíî äëÿ òèïà êàêèì-òî äðóãèì ñïîñîáîì, îí óñòàíàâëèâàåò çíà÷åíèå «íîëü» äëÿ ýòîãî òèïà. Çàìåòüòå, ÷òî ïîä íîëåì çäåñü ïîíèìàåòñÿ íå 0, à íåêîå íóëåâîå çíà÷åíèå äëÿ ýòîãî òèïà! Èñêëþ÷èòåëüíàÿ ñèòóàöèÿ: âûøåäøèå çà ãðàíèöó äèàïàçîíà çíà÷åíèÿ TIME óðåçàþòñÿ äî ñîîòâåòñòâóþùåé ãðàíèöû. Òàáë. 5.1 íèæå ïîêàçûâàåò íóëåâûå çíà÷åíèÿ äëÿ êàæäîãî òèïà:
- íóëåâîå çíà÷åíèå èìååò îñîáûé ñòàòóñ, íî âû ìîæåòå ñîõðàíÿòü åãî èëè îáðàùàòüñÿ ê íåìó, ÿâíî èñïîëüçóÿ çíà÷åíèÿ, ïîêàçàííûå â òàáëèöå. Âû ìîæåòå òàêæå äåëàòü ýòî, ïðèìåíÿÿ çíà÷åíèÿ “0” èëè 0.
Òàáëèöà 5.1. Íóëåâûå çíà÷åíèÿ äëÿ êàæäîãî òèïà.
| Òèï ñòîëáöà | Íóëåâîå çíà÷åíèå |
| DATETIME | “0000-00-00 00:00:00” |
| DATE | “0000-00-00” |
| TIMESTAMP | 00000000000000 (äëèíà çàâèñèò îò ðàçìåðà îòîáðàæåíèÿ) |
| TIME | '00:00:00' |
| YEAR | 0000 |



