Ïðîáëåìà Y2K (2000 ãîäà) è òèïû Date â MySQL
Ãëàâíàÿ Ñòðàíèöà » Êíèãè ïî PHP » MySQL óðîêè äëÿ íà÷èíàþùèõ ñ íóëÿ » Ïðîáëåìà Y2K (2000 ãîäà) è òèïû Date â MySQL
Íåïîñðåäñòâåííî äëÿ MySQL Ó2Ê-áåçîïàñåí, íî âîò äëÿ ââîäèìûõ çíà÷åíèé - íàïðîòèâ. Ëþáîé ââîä, ñîäåðæàùèé çíà÷åíèÿ ãîäà ñ 2 öèôðàìè, íåîäíîçíà÷åí ïîòîìó, ÷òî ñòîëåòèå íåèçâåñòíî. Òàêèå çíà÷åíèÿ äîëæíû èíòåðïðåòèðîâàòüñÿ â ôîðìå ñ 4 öèôðàìè, ïîòîìó ÷òî MySQL ñîõðàíÿåò ãîäû, âíóòðåííå âñåãäà èñïîëüçóÿ ÷åòûðå öèôðû.
Äëÿ òèïîâ DATETIME, DATE, TIMESTAMP è YEAR MySQL èíòåðïðåòèðóåò äàòû ñ íåîäíîçíà÷íûì ãîäîì òàê:
- Çíà÷åíèÿ ãîäà â äèàïàçîíå îò 00 äî 69 áóäóò ïðåîáðàçîâàíû â çíà÷åíèÿ îò 2000 äî 2069;
- Çíà÷åíèÿ ãîäà â äèàïàçîíå îò 70 äî 99 áóäóò ïðåîáðàçîâàíû â çíà÷åíèÿ îò 1970 äî 1999.
Íå çàáóäüòå, ÷òî ýòè ïðàâèëà îáåñïå÷èâàþò òîëüêî ïðèåìëåìûå ïðåäïîëîæåíèÿ îòíîñèòåëüíî òîãî, ÷òî âàøè äàííûå îçíà÷àþò. Åñëè ëîãèêà, èñïîëüçóåìàÿ MySQL, íå ïðîèçâîäèò ïðàâèëüíûõ çíà÷åíèé, âû äîëæíû ñàìè îáåñïå÷èòü îäíîçíà÷íûé ââîä, ñîäåðæàùèé çíà÷åíèÿ ãîäà ñ 4 öèôðàìè.
Îáðàòèòå âíèìàíèå, ÷òî èíñòðóêöèÿ ORDER BY ñîðòèðóåò çíà÷åíèÿ òèïîâ YEAR, DATE è DATETIME Ñ 2 öèôðàìè ïðàâèëüíî.
Îáðàòèòå âíèìàíèå òàêæå, ÷òî íåêîòîðûå ôóíêöèè, ïîäîáíî MIN() è ÌÀÕ(), ïðåîáðàçóþò òèïû TIMESTAMP è DATE â ÷èñëî. Ýòî îçíà÷àåò, ÷òî timestamp ñ ãîäîì ñ 2 öèôðàìè íå áóäåò ðàáîòàòü ïðàâèëüíî ñ ýòèìè ôóíêöèÿìè. Èñïðàâëåíèå â ýòîì ñëó÷àå äîëæíî ïðåîáðàçîâàòü TIMESTAMP èëè DATE â ôîðìàò ãîäà ñ 4 öèôðàìè èëè èñïîëüçîâàòü íå÷òî âðîäå MIN(DATE_ADD (timestamp, INTERVAL Î DAYS)).



