Íàâèãàöèÿ

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

Ïàðòíåðû

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

Ñòàòèñòèêà

Òèïû DATETIME, DATE è TIMESTAMP â MySQL

Ãëàâíàÿ Ñòðàíèöà » Êíèãè ïî PHP » MySQL óðîêè äëÿ íà÷èíàþùèõ ñ íóëÿ » Òèïû DATETIME, DATE è TIMESTAMP â MySQL

Òèïû DATETIME, DATE è TIMESTAMP ñâÿçàíû. Ýòîò ðàçäåë îïèñûâàåò èõ õàðàêòå¬ðèñòèêè è ðàçëè÷èÿ.

Òèï DATETIME èñïîëüçóåòñÿ, êîãäà âû íóæäàåòåñü â çíà÷åíèÿõ, ñîäåðæàùèõ èíôîðìàöèþ î äàòå è âðåìåíè. MySQL ïîëó÷àåò è îòîáðàæàåò çíà÷åíèÿ DATETIME â ôîðìàòå YYYY-MM-DD HH:MM:SS. Ïîääåðæèâàåìûé äèàïàçîí: îò 1000-01-01 00:00:00 äî 9999-12-31 23:59:59.

Òèï DATE èñïîëüçóåòñÿ, êîãäà âû íóæäàåòåñü òîëüêî â çíà÷åíèè äàòû, áåç çíà÷åíèÿ âðåìåíè. MySQL ïîëó÷àåò è îòîáðàæàåò çíà÷åíèÿ DATE â ôîðìàòå YYYY-MM-DD. Ïîääåðæèâàåìûé äèàïàçîí: îò 1000-01-01 äî 9999-12-31.

Òèï ñòîëáöà TIMESTAMP îáåñïå÷èâàåò òèï, êîòîðûé âû ìîæåòå èñïîëüçîâàòü, ÷òîáû àâòîìàòè÷åñêè îòìåòèòü îïåðàöèè INSERT èëè UPDATE òåêóùåé äàòîé è âðåìåíåì. Äëÿ ýòîãî ñëåäóåò ââåñòè â òàáëèöó ñòîëáåö òèïà TIMESTAMP. Òåïåðü ïðè ëþáîì îáíîâëåíèè çàïèñè, îí áóäåò àâòîìàòè÷åñêè óñòàíîâëåí â äàòó è âðåìÿ ìîäèôèêàöèè, ÷òî âåñüìà ïîëåçíî â öåëÿõ îòñëåæèâàíèÿ èçìåíåíèé. Åñëè âû èìååòå â òàáëèöå ìíîãî ñòîëáöîâ òèïà TIMESTAMP, òîëüêî ïåðâûé èç íèõ ìîäèôèöèðóåòñÿ àâòîìàòè÷åñêè.

Àâòîìàòè÷åñêîå ìîäèôèöèðîâàíèå ïåðâîãî ñòîëáöà TIMESTAMP ïðîèñõîäèò ïðè ëþáîì èç íèæå ïåðå÷èñëåííûõ óñëîâèé:

  • ýòîò ñòîëáåö íå îïðåäåëåí ÿâíî â èíñòðóêöèè INSERT èëè LOAD DATA INFILE;
  • ñòîëáåö íå îïðåäåëåí ÿâíî â èíñòðóêöèè UPDATE è íåêîòîðîì äðóãîì çíà÷åíèè èçìåíåíèé ñòîëáöà. Îáðàòèòå âíèìàíèå, ÷òî UPDATE, êîòîðûé óñòàíàâëèâàåò ñòîëáåö ê çíà÷åíèþ, óæå çàêðåïëåííîìó çà íèì, íå ïðèâåäåò ê ìîäèôèêàöèè ñòîëáöà òèïà TIMESTAMP, òàê êàê, åñëè âû óñòàíàâëèâàåòå ñòîëáåö ê òåêóùåìó çíà÷åíèþ, MySQL èãíîðèðóåò ìîäèôèêàöèþ äëÿ ïîâûøåíèÿ ýôôåêòèâíîñòè;
  • âû ÿâíî óñòàíàâëèâàåòå ñòîëáåö òèïà TIMESTAMP â NULL.

Âòîðîé è ïîñëåäóþùèå ñòîëáöû òèïà TIMESTAMP òàêæå ìîãóò áûòü óñòàíîâëåíû ê òåêóùåé äàòå è âðåìåíè. Äëÿ ýòîãî óñòàíîâèòå ñîîòâåòñòâóþùèé ñòîëáåö â çíà÷åíèå NULL èëè â NOW().

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

  • ïîçâîëüòå MySQL óñòàíîâèòü ñòîëáåö, êîãäà ñòðîêà ñîçäàíà. Ýòî èíèöèàëèçèðóåò ïåðåìåííóþ è óñòàíîâèò åå â òåêóùóþ äàòó è âðåìÿ;
  • êîãäà âû âûïîëíÿåòå ïîñëåäóþùèå ìîäèôèêàöèè äðóãèõ ñòîëáöîâ â ñòðîêå, óñòàíîâèòå ñòîëáåö TIMESTAMP ÿâíî â íóæíîå çíà÷åíèå.

Çíà÷åíèÿ TIMESTAMP èìåþò òî÷íîñòü â îäíó ñåêóíäó. Çíà÷åíèÿ îòîáðàæàþòñÿ êàê ÷èñëà.

Ôîðìàò, â êîòîðîì MySQL ïîëó÷àåò è îòîáðàæàåò çíà÷åíèÿ TIMESTAMP, çàâè¬ñÿò îò ðàçìåðà îòîáðàæåíèÿ, êàê ïðîèëëþñòðèðîâàíî òàáë. 5.2. Ïîëíûé ôîðìàò TIMESTAMP ñîäåðæèò 14 öèôð, íî ñòîëáöû ìîãóò áûòü ñîçäàíû ñ áîëåå ìåëêèì ôîðìàòîì îòîáðàæåíèÿ:

Òàáëèöà 5.2. Ôîðìàò îòîáðàæåíèÿ ñòîëáöîâ TIMESTAMP.

Òèï ñòîëáöà Ôîðìàò îòîáðàæåíèÿ
TIMESTAMP (14) YYYYMMDDHHMMSS
TIMESTAMP (12) YYMMDDHHMMSS
TIMESTAMP (10) YYMMDDHHMM
TIMESTAMP (8) YYYYMMDD
TIMESTAMP (6) YYMMDD
TIMESTAMP (4) YYMM
TIMESTAMP (2) YY

Âñå ñòîëáöû òèïà TIMESTAMP èìåþò òîò æå ñàìûé ðàçìåð ïàìÿòè, íåçàâèñèìî îò ðàçìåðà îòîáðàæåíèÿ. Òî åñòü íà ñàìîì äåëå â òàáëèöå õðàíèòñÿ ïîëíîå çíà÷åíèå, à îòîáðàæåíèå îïðåäåëÿåò ëèøü òî, êàêàÿ ÷àñòü ïîëíîãî çíà÷åíèÿ áóäåò âàì ïîêàçàíà ïî çàïðîñó.

Íàèáîëåå ðàñïðîñòðàíåííûå ðàçìåðû: 6, 8, 12 è 14. Âû ìîæåòå îïðåäåëÿòü ïðîèçâîëüíûé ðàçìåð ïðè ñîçäàíèè òàáëèöû, íî çíà÷åíèÿ, ðàâíûå 0 èëè áîëüøå 14, áóäóò óñòàíîâëåíû êàê 14. Íå÷åòíûå ðàçìåðû â äèàïàçîíå îò 1 äî 13 áóäóò ïðèâåäåíû ê ñëåäóþùåìó ÷åòíîìó ÷èñëó.

Âû ìîæåòå îïðåäåëÿòü çíà÷åíèÿ DATETIME, DATE è TIMESTAMP, èñïîëüçóþùèå ëþáîé èç îáùåãî íàáîðà ôîðìàòîâ:

  • ñòðîêà â ôîðìàòå YYYY-MM-DD HH:MM:SS èëè YY-MM-DD HH:MM:SS. Îáëåã÷åííûé ñèíòàêñèñ ïîçâîëÿåòñÿ: ëþáîé ñèìâîë ïóíêòóàöèè ìîæåò èñïîëüçîâàòüñÿ êàê ðàçäåëèòåëü ìåæäó ÷àñòÿìè äàòû èëè ÷àñòÿìè âðåìåíè. Íàïðèìåð, 98-12-31 11:30:45, 98.12.31 11+30+45, 98/12/31 11*30*45 è 98@12@31 11Ë30Ì5 ðàâíû;
  • ñòðîêà â ôîðìàòå YYYY-MM-DD èëè YY-MM-DD. Îáëåã÷åííûé ñèíòàêñèñ ïîçâîëÿåòñÿ è çäåñü: íàïðèìåð, ñòðîêè 98-12-31, 98.12.31, 98/12/31 è 98@12@31 ÿâëÿþòñÿ ýêâèâàëåíòíûìè;
  • ñòðîêà âîîáùå áåç ðàçäåëèòåëåé â ôîðìàòå YYYYMMDDHHMMSS èëè YYMMDDHHMMSS, ïðè óñëîâèè, ÷òî ñòðîêà èìååò ñìûñë êàê äàòà. Íàïðèìåð, 19970523091528 è 970523091528 èíòåðïðåòèðóþòñÿ êàê 1997-05-23 09:15:28, íî 971122129015 çàïðåùåí (èìååò íåïðàâèëüíóþ ìèíóòíóþ ÷àñòü) è ïðåâðàùàåòñÿ â 0000-00-00 00:00:00;
  • ñòðîêà áåç ðàçäåëèòåëåé â ôîðìàòå YYYYMMDD èëè YYMMDD, ïðè óñëîâèè, ÷òî ñòðîêà èìååò ñìûñë êàê äàòà. Íàïðèìåð, 19970523 è 970523
  • èíòåðïðåòèðóþòñÿ êàê 1997-05-23, íî 971332 çàïðåùåí (èìååò íåïðàâèëüíóþ ÷àñòü ìåñÿöà) è ñòàíîâèòñÿ 0000-00-00;
  • ÷èñëî â ôîðìàòå YYYYMMDDHHMMSS èëè YYMMDDHHMMSS, ïðè óñëîâèè, ÷òî ÷èñëî èìååò ñìûñë êàê äàòà. Íàïðèìåð, 19830905132800 è 830905132800 èíòåðïðåòèðóþòñÿ êàê 1983-09-05 13:28:00;
  • ÷èñëî â ôîðìàòå YYYYMMDD èëè YYMMDD ïðè óñëîâèè, ÷òî ÷èñëî èìååò ñìûñë êàê äàòà. Íàïðèìåð, 19830905 è 830905 èíòåðïðåòèðóþòñÿ êàê 1983-09-05;
  • ðåçóëüòàò ôóíêöèè, êîòîðàÿ âîçâðàùàåò çíà÷åíèå, ïðèåìëåìîå â êîíòåêñòå DATETIME, DATE èëè TIMESTAMP, âðîäå NOW(), èëè CURRENT_DATE.

Çàïðåùåííûå çíà÷åíèÿ DATETIME, DATE èëè TIMESTAMP áóäóò ïðåîáðàçîâàíû â íóëåâîå çíà÷åíèå ñîîòâåòñòâóþùåãî òèïà (0000-00-00 00:00:00, 0000-00-00 èëè 00000000000000 ñîîòâåòñòâåííî).

Äëÿ çíà÷åíèé, îïðåäåëåííûõ êàê ñòðîêè, âêëþ÷àþùèå ðàçäåëèòåëè ÷àñòåé äàòû, íå òðåáóåòñÿ îïðåäåëÿòü äâå öèôðû äëÿ çíà÷åíèé ìåñÿöà èëè äíÿ, ìåíüøèõ, ÷åì 10: 1979-6-9, ýêâèâàëåíòíî 1979-06-09. Òî÷íî òàê æå äëÿ çíà÷åíèé, îïðåäåëåííûõ êàê ñòðîêè, êîòîðûå âêëþ÷àþò ðàçäåëèòåëè ÷àñòè âðåìåíè, íåîáÿçàòåëüíî îïðåäåëÿòü äâå öèôðû äëÿ çíà÷åíèé ÷àñà, ìèíóòû èëè ñåêóíäû, êîòîðûå ìåíüøå, ÷åì 10: 1979-10-30 1:2:3 çàäàåò òî æå ñàìîå, ÷òî è 1979-10-30 01:02:03.

Çíà÷åíèÿ, îïðåäåëåííûå êàê ÷èñëà, äîëæíû áûòü äëèíîé â á, 8,12 èëè 14 öèôð. Åñëè ÷èñëî äëèíîé â 8 èëè 14 öèôð, òî ñ÷èòàåòñÿ, ÷òî îíî â ôîðìàòå YYYYMMDD èëè YYYYMMDDHHMMSS, è ÷òî ãîä çàäàí ïåðâûìè 4 öèôðàìè. Åñëè ÷èñëî äëèíîé â á èëè 12 öèôð, ñ÷èòàåòñÿ, ÷òî îíî â ôîðìàòå YYMMDD èëè YYMMDDHHMMSS, è ÷òî ãîä çàäàí ïåðâûìè 2 öèôðàìè. ×èñëà, êîòîðûå íå ñîîòâåòñòâóþò ýòèì äëèíàì, äîïîëíÿþòñÿ íóëÿìè äî ñàìîé áëèçêîé äëèíû.

Çíà÷åíèÿ, îïðåäåëåííûå êàê íåðàçãðàíè÷åííûå ñòðîêè èíòåðïðåòèðóþòñÿ, ñîãëàñíî èõ äëèíå, êàê îíà åñòü. Ýòî îçíà÷àåò, ÷òî âû íå äîëæíû èñïîëüçîâàòü ñòðîêè êîðî÷å øåñòè ñèìâîëîâ. Íàïðèìåð, åñëè âû îïðåäåëÿåòå 9903, äóìàÿ, ÷òî ïðåäñòàâèòå ìàðò 1999 ãîäà, âû î÷åíü ñêîðî íàéäåòå, ÷òî MySQL ïîäñòàâëÿåò íîëü äëÿ äàòû â âàøó òàáëèöó. Ýòî ïîòîìó, ÷òî çíà÷åíèÿ ãîäà è ìåñÿöà 99 è 03, íî ÷àñòü äíÿ ïðîïóùåíà, òàê ÷òî çíà÷åíèå íå ÿâëÿåòñÿ äîïóñòèìîé äàòîé. Âåçäå ïðèìåíÿåòñÿ ôîðìàò ãîä-ìåñÿö-äåíü.

Ñòîëáöû TIMESTAMP ñîõðàíÿþò äîïóñòèìûå çíà÷åíèÿ, èñïîëüçóÿ òî÷íîñòü, ñ êîòîðîé çíà÷åíèå áûëî îïðåäåëåíî, íåçàâèñèìî îò ðàçìåðà îòîáðàæåíèÿ. Ïîýòîìó:

  • âñåãäà îïðåäåëÿéòå ãîä, ìåñÿö è äåíü, äàæå åñëè âàø òèï ñòîëáöà TIMESTAMP(4) èëè TIMESTAMP(2). Èíà÷å, çíà÷åíèå íå áóäåò äîïóñòèìîé äàòîé, à áóäåò ñîõðàíåí 0;
  • åñëè âû èñïîëüçóåòå ALTER TABLE (îáñóæäàåòñÿ ïîçæå), ÷òîáû ðàñøèðèòü óçêèé ñòîëáåö TIMESTAMP, íà÷íåò îòîáðàæàòüñÿ òà èíôîðìàöèÿ, êîòîðàÿ ðàíüøå áûëà ñêðûòà. Òî åñòü ýòà èíôîðìàöèÿ â ñòîëáöå åñòü (è âñåãäà áûëà), íî íå ïîêàçûâàëàñü èç-çà ðàçìåðà îòîáðàæåíèÿ!
  • òî÷íî òàê æå ñóæåíèå ñòîëáöà TIMESTAMP íå óíè÷òîæèò èíôîðìàöèþ, ïðîñòî ìåíüøåå êîëè÷åñòâî èíôîðìàöèè áóäåò ïîêàçûâàòüñÿ, êîãäà îòîáðàæàþòñÿ çíà÷åíèÿ ñòîëáöà. Íî çíà÷åíèå âñå ðàâíî õðàíèòñÿ ïîëíîñòüþ;
  • õîòÿ çíà÷åíèÿ TIMESTAMP ñîõðàíåíû ñî âñåé òî÷íîñòüþ, òîëüêî ôóíêöèÿ UNIX_TIMESTAMP() ðàñïðîñòðàíÿåòñÿ íåïîñðåäñòâåííî íà îñíîâíîå ñîõðàíåííîå çíà÷åíèå. Äðóãèå ôóíêöèè èìåþò äåëî ñ ôîðìàòèðóåìûì çíà÷åíèåì. Âû íå ìîæåòå èñïîëüçîâàòü ôóíêöèè òèïà HOUR() èëè SECOND(), åñëè ðåëåâàíòíàÿ ÷àñòü çíà÷åíèÿ TIMESTAMP íå âêëþ÷åíà â ôîðìàòèðóåìîå çíà÷åíèå (îíè ïîëó÷àþò äàííûå ñ ó÷åòîì ðàçìåðà îòîáðàæåíèÿ, à çíà÷èò, ïðîñòî íå óâèäÿò íóæíûõ äàííûõ). Íàïðèìåð, ÷àñòü ÍÍ ñòîëáöà TIMESTAMP íå îòîáðàæàåòñÿ, åñëè ðàçìåð îòîáðàæåíèÿ ìåíüøå 10. Ïðè÷åì íå îòîáðàæàåòñÿ íå òîëüêî äëÿ ïîëüçîâàòåëÿ, íî è äëÿ âíóòðåííèõ ôóíêöèé ñàìîãî ñåðâåðà.

Âû ìîæåòå äî íåêîòîðîé ñòåïåíè íàçíà÷àòü çíà÷åíèÿ îäíîãî òèïà äàòû îáúåêòó èíîãî òèïà äàòû. Îäíàêî, ìîæåò èìåòüñÿ íåêîòîðîå èçìåíåíèå çíà÷åíèÿ èëè ïîòåðÿ èíôîðìàöèè ïðè òàêîì ïîäõîäå:

  • åñëè âû íàçíà÷àåòå çíà÷åíèå DATE îáúåêòó DATETIME èëè TIMESTAMP, ÷àñòü âðåìåíè, âîçíèêàþùåãî â ðåçóëüòàòå çíà÷åíèÿ áóäåò óñòàíîâëåíà â 00:00:00 ïîòîìó, ÷òî çíà÷åíèå DATE íå ñîäåðæèò èíôîðìàöèþ äëÿ âðåìåíè;
  • åñëè âû óñòàíàâëèâàåòå äëÿ îáúåêòà DATE çíà÷åíèå DATETIME èëè TIMESTAMP, çíà÷åíèÿ âðåìåíè óäàëÿþòñÿ, ïîòîìó ÷òî òèï DATE íå ñîõðàíÿåò èíôîðìàöèþ î âðåìåíè;
  • íå çàáóäüòå, ÷òî, õîòÿ DATETIME, DATE è TIMESTAMP ìîãóò áûòü îïðåäåëåíû ñ èñïîëüçîâàíèåì òîãî æå ñàìîãî íàáîðà ôîðìàòîâ, îíè èìåþò ðàçíûé äèàïàçîí çíà÷åíèé. Íàïðèìåð, çíà÷åíèå. TIMESTAMP íå ìîæåò áûòü ðàíåå, ÷åì 1970, èëè ïîçæå, ÷åì 2037. Ýòî îçíà÷àåò, ÷òî äàòà òèïà 1968-01-01, êîòîðàÿ âïîëíå íîðìàëüíà äëÿ DATETIME èëè DATE, íåäîïóñòèìà äëÿ ïåðåìåííîé òèïà TIMESTAMP è ïðåâðàòèòñÿ â 0.  îáùåì, áóäüòå îñìîòðèòåëüíû!

Çíàéòå íåêîòîðûå ëîâóøêè ïðè îïðåäåëåíèè çíà÷åíèé äàòû:

  • îñëàáëåííûé èëè óïðîùåííûé ôîðìàò, äîïóñòèìûé äëÿ çíà÷åíèé, îïðåäåëåííûõ êàê ñòðîêè, áåçóñëîâíî, õîðîø è óäîáåí, íî ìîæåò îáìàíûâàòü. Íàïðèìåð, çíà÷åíèå òèïà 10:11:12 ìîãëî áû íàïîìèíàòü çíà÷åíèå âðåìåíè èç-çà ðàçäåëèòåëÿ, íî åñëè îíî èñïîëüçóåòñÿ â êîíòåêñòå äàòû, òî áóäåò èíòåðïðåòèðîâàòüñÿ êàê ãîä 2010-11-12. Çíà÷åíèå 10:45:15 áóäåò ïðåîáðàçîâàíî â 0000-00-00 ïîòîìó, ÷òî 45 çàäàåò íåäîïóñòèìûé ìåñÿö;
  • çíà÷åíèÿ ãîäà, îïðåäåëåííûå êàê äâå öèôðû, íåîäíîçíà÷íû ïîòîìó, ÷òî ñòîëåòèå íåèçâåñòíî. MySQL èíòåðïðåòèðóåò èõ òàê, êàê ðàññêàçàíî âûøå.