Idő formátum mysql időbélyeg vs dátum idő, személyes blog Valery Leontiev
A MySQL 5 többszörös adattípusok tárolhatja a dátumot és az időt. Ez TIMESTAMP DATE, DATETIME, IDŐ, és az évet. Ezek mindegyikének megvan a maga jellemzői, és választhat egy, vagy más típusú naptár kell különíteni minden egyes konkrét helyzetben. Szeretném megosztani veletek az eredmény az ma miniissledovaniya ilyen típusú, beleértve az aspektusa dolgozik időzónák. Szóval, minden naptári adattípusok részletesen a következő részben „10.3. Dátum és idő típusok »MySQL utasítás. És fontos információkat támogatása időzónák adatbázis, festett részében az „9.7. MySQL Server Time Zone Support ». Minden tovább kell alapulnia a tanulmány a vezetés. Ugyanakkor itt az egyetlen választás adott az árnyalatok mellett az egyik típus, vagy egy másik, úgyhogy anyag nem helyettesítheti a kézi, hanem kiegészíti azt.
Eleinte egy rövid leírást minden egyes típusa:
- TIMESTAMP - az adatok típusát, hogy tárolja a dátumot és az időt. Az adatok tárolása a másodpercek számát, mivel az elején a „korszaka Unix”. Értéktartomány: 1970-01-01 00:00:00 - 2038/12/31 00:00:00. Elfoglalt 4 byte.
- ÉV - az adattípus tárolására évben. A tartomány 1901 - 2155. Tart 1 byte.
- DATE - adattípus tárolására dátumokat. Tartomány: 1000/01/01 - 9999-12-31. Tart 3 bájt.
- TIME - az adatok típusát, hogy tárolja az időt. Tartomány: -828: 59: 59-828: 59: 59. Tart 3 bájt.
- DATETIME - adattípus tárolni a dátumot és az időt. Tartomány: 1000/01/01 00:00:00 - 9999-12-31 00:00:00. Tart 8 bájt.
Elemzését követően típusainak leírása fent bemutatott tehetünk szinte minden következtetéseket az előnyeit és hátrányait a különböző típusokat. Elég egyszerű és nyilvánvaló.
A naptár típusú MySQL
Kezdjük a legegyszerűbb - típusú ÉV. Az egyetlen előnye - kis méret - csak 1 byte. Hanem azért, mert ez, vannak szigorú korlátozások az elfogadható értékek (típus csak tárolni 255 különböző értéket). Nehéz elképzelni, hogy egy gyakorlati helyzet, ahol érdemes tartani szigorúan éven belül tartományban 1901 és 2155. Ezen kívül a típusú smallint (2 bájt) ad egy sor elegendő a legtöbb helyzetben az év tárolás. És mentse 1 byte a sorban az adatbázis tábla korunkban nincs értelme.
DATE és DATETIME típusokat lehet kombinálni egy csoportba. Tartják a dátumot vagy a dátumot és az időt egy meglehetősen széles körű az elfogadható értékek, függetlenül az időzónát a szerveren. Használatuk határozottan gyakorlati értelemben. De ha azt akarjuk, hogy a dátumokat a történelmi események, hogy menjen vissza az időben a keresztény korban, akkor ki kell választani más típusú adatokat. Hogy a dátumokat bizonyos események, esetleg túl számos típusú TIMESTAMP (születésnap, így a kibocsátás időpontját termékek elnök megválasztásában, a Space Launch, stb), ezek ideális típusokat. Ha ilyen típusú kell vizsgálni, egy fontos dolog, de az alábbiakban.
Időtípus lehet használni a tárolási időszak, amikor nem kell a pontosság kevesebb, mint 1 másodperc, és időközönként kevesebb, mint 829 óra. Add semmi több.
Ez maradt a legérdekesebbek - időbélyeg. Figyelembe kell venni, összehasonlítva a DATE, DATETIME: TIMESTAMP is tervezték, hogy tárolja a dátumot és / vagy időt a származási bizonyos eseményeket. Egy fontos különbség közöttük értékek között mozog: nyilvánvaló, hogy TIMESTAMP nem alkalmas a tárolásra a történelmi események (akár mint például születésnap), de a tökéletes tárolására a jelenlegi (fakitermelés, dátum a kiküldetés cikkeket, hozzátéve termékek, rendelés) és jövőbeli a belátható jövőbeni fejlesztések (új verziók, naptárak, tervezők, stb.)
A fő kényelmét TIMESTAMP típusú felhasználás, hogy az oszlopok a táblázatokban az ilyen típusú, megadhat egy alapértelmezett értéket formájában helyettesítése az aktuális időt, valamint az aktuális időt, amikor nyilvántartások frissítésével. Ha szüksége van ezeket a funkciókat, majd a valószínűsége 99% TIMESTAMP - pontosan mire van szüksége. (Ahogy etodelat, nézze meg a kézikönyv.)
Ne félj, hogy mi megközelíteni 2038 szoftver nem fog működni. Először is, akár ebben az időben a szoftver valószínűleg egyszerűen megszűnik használni (különösen változatok vannak írva most). Másodszor, azzal a megközelítéssel, ez az időpont MySQL fejlesztőnek kell gondolni valamit menteni a szoftver teljesítményét. Minden dől el, valamint a problémát a Y2K.
Tehát az időbélyeg típusú használat tárolására és időpontjai események eredményeit korunk, és DATETIME és DATE - tárolására dátumok és időpontok teljesítmények a történelmi események, vagy mély jövőbeli eseményeket.
A tartományok - fontos tesznek különbséget TIMESTAMP, DATETIME és dátuma, de nem ez a fő dolog. A lényeg az, hogy az időbélyeg értéket tárolja UTC. Amikor a tároló az értékeket fordítja az aktuális időzóna UTC, és amikor - olvasható a jelenlegi időzóna UTC. DATETIME és DATE tároljuk és a kimenet mindig egy és ugyanazon időben, függetlenül attól, hogy az időzónák.
Időzónák van beállítva a MySQL adatbázis globálisan vagy az aktuális kapcsolat .Poslednee lehet használni a működését különböző felhasználók különböző időzónák szintjén az adatbázisban. Minden idők értékeket fizikailag tárolt UTC és a vevő által befogadott és adott Clint - az értékekkel időzónát. De csak ha adattípus időbélyeg. DATE és DATETIME mindig fogadja, tárolja, és így ugyanazt az értéket.
NOW () függvény, szinonimái visszatér az idő értéket az aktuális időzóna a felhasználó.
X felhasználó dolgozik UTC / GMT zóna + 2, Y - az UTC / GMT + 3 zóna. A vegyületek egy sor megfelelő MySQL (mindegyik saját) az időzónát. A használó egy üzenetet a fórumon, mi érdekli az kelte az üzenetet.
1. lehetőség: DATETIME. X felhasználó ír egy üzenetet a 14:00 UTC / GMT + 2. Az érték a „Dátum” mező az üzenet kerül beillesztésre eredményeként a NOW () függvény - 14:00. Felhasználó Y szól az írás üzenetét, és látja ugyanazt a 14.00. De meg kell beállítás stoitzona UTC / GMT + 3, és azt hiszi, hogy az üzenet volt írva, nem csak ez, hanem egy órája.
2. lehetőség: időbélyeg. X felhasználó ír egy üzenetet a 14:00 UTC / GMT + 2. A "dátum" mező hiányzik eredményeként NOW () függvény - ebben az esetben - 12:00 UTC / GMT + 0. PolzovatelY olvassa az üzenetet írásban időt és kap (UTC / GMT + 3) (12:00 UTC / GMT + 0) = 15:00 UTC / GMT + 3. Minden kiderül, pontosan úgy, ahogy szeretnénk. És ami a legfontosabb - nagyon kényelmes a használata: támogatja az egyéni időzónák nem kell írni a kódot, hogy az időt.
Az a lehetőség, hogy ebben az esetben az aktuális időt és munkát az időzónát a TIMESTAMP típusú olyan erős, hogy ha valamilyen jelentkezzen szükséges tárolni a dátumot idő nélkül, akkor is szükséges használni TIMESTAMP helyett DATE, nem megtakarítás 1 byte különbség. Ugyanakkor a „0:00:00” egyszerűen figyelmen kívül hagyja.