Tipuri de date de dată, oră și oră. Tipuri de date pentru dată și oră

Tipurile DATETIME, DATE și TIMESTAMP sunt tipuri de date înrudite. Această secțiune descrie proprietățile lor, aspecte comuneși diferențe.

Tipul de date DATETIME este utilizat pentru valorile care conțin atât informații despre dată, cât și despre oră. MySQL preia și afișează valorile DATETIME în formatul „AAAA-LL-ZZ HH:MM:SS”. Intervalul de valori acceptat este de la „1000-01-01 00:00:00” la „9999-12-31 23:59:59”. ("acceptat" înseamnă că, deși valorile cu valori de timp anterioare pot funcționa în continuare, nu există nicio garanție că vor fi stocate și afișate corect).

Tipul DATE este utilizat pentru valorile cu doar informații despre dată, fără o parte de timp. MySQL preia și afișează valorile DATE în format „AAAA-LL-ZZ”. Intervalul de valori acceptat este de la „1000-01-01” la „9999-12-31”.

Tipul de coloană TIMESTAMP oferă un tip de reprezentare a datelor care poate fi utilizat pentru înregistrare automată data și ora curentă la efectuarea operațiunilor INSERT sau UPDATE. Dacă aveți mai multe coloane TIMESTAMP, numai prima este actualizată automat.

Prima coloană TIMESTAMP este actualizată automat atunci când oricare dintre următoarele condiții este adevărată:

  • Coloana nu este specificată în mod explicit în comanda INSERT sau LOAD DATA INFILE.
  • Coloana nu este specificată în mod explicit în comanda UPDATE și schimbă o valoare în altă coloană (rețineți că o comandă UPDATE care setează coloana la aceeași valoare pe care o avea înainte de executarea comenzii nu va determina actualizarea coloanei TIMESTAMP , deoarece din motive de performanță MySQL ignoră astfel de actualizări atunci când setează o coloană la valoarea sa actuală).
  • Valoarea din coloana TIMESTAMP este setată în mod explicit la NULL.

Pentru coloanele rămase (cu excepția primelor) de tip TIMESTAMP, puteți seta și valoarea la data și ora curente. Pentru a face acest lucru, trebuie pur și simplu să setați coloana la NULL sau NOW() .

Orice coloană TIMESTAMP (chiar și prima coloană de acest tip) poate fi setat la o altă valoare decât data și ora curente. Acest lucru se face prin setarea explicită la valoarea dorită. Această proprietate poate fi folosit, de exemplu, dacă trebuie să setați coloana TIMESTAMP la data și ora curente atunci când creați un rând și când actualizați ulterior acel rând, valoarea coloanei nu ar trebui să se schimbe:

  • Lăsați MySQL să seteze automat valoarea coloanei TIMESTAMP atunci când creați un rând dat. Coloana va fi resetată la data și ora curente.
  • Când efectuați actualizări ulterioare la alte coloane dintr-un rând dat, trebuie să setați în mod explicit coloana TIMESTAMP la valoarea sa curentă.

Cu toate acestea, pe de altă parte, ar putea fi mai ușor să utilizați coloana DATETIME în aceste scopuri. Când este creat un rând, acesta ar trebui inițializat cu funcția NOW() și lăsat singur pentru actualizările ulterioare.

Valorile TIMESTAMP pot varia de la începutul anului 1970 până la o anumită valoare în 2037, cu o rezoluție de o secundă. Aceste cantități sunt afișate ca valori numerice.

Formatul de date în care MySQL preia și afișează valorile TIMESTAMP depinde de numărul de caractere afișat. Acest lucru este ilustrat în tabelul de mai jos. Format complet TIMESTAMP are 14 zecimale, dar puteți crea coloane TIMESTAMP cu un șir de ieșire mai scurt:

Tip de coloană Format de iesire
TIMESTAMP(14)AAAAMMDDDHHMMSS
TIMESTAMP(12)YYMMDDHHMMSS
TIMESTAMP(10)AAAMMDDHHMM
TIMESTAMP(8)YYYYMMDD
TIMESTAMP(6)AAAMMDD
TIMESTAMP(4)YYMM
TIMESTAMP(2)YY

Indiferent de dimensiunea valorii de ieșire, dimensiunea datelor stocate în coloanele TIMESTAMP este întotdeauna aceeași. Cel mai frecvent utilizat format de ieșire este 6, 8, 12 sau 14 zecimale. Când creați un tabel, puteți specifica o dimensiune personalizată pentru valorile de ieșire, dar dacă setați dimensiunea la 0 sau mai mare decât 14, se va folosi valoarea 14. Valorile de dimensiune impare din intervalul 1 la 13 vor fi scalat la cel mai apropiat număr par mai mare.

Valorile DATETIME , DATE și TIMESTAMP pot fi specificate în orice set standard de formate:

  • Ca șir în formatul „AAAA-LL-ZZ HH:MM:SS” sau în formatul „AA-LL-ZZ HH:MM:SS” . Sintaxa „ușoară” este permisă - puteți utiliza orice semn de punctuație ca separator între părți ale secțiunilor de dată sau oră. De exemplu, valorile „98-12-31 11:30:45” , „98.12.31 11+30+45” , „98/12/31 11*30*45” și „98@12@31” 11^30^ 45" sunt echivalente.
  • Ca șir în formatul „AAAA-LL-ZZ” sau în formatul „AA-LL-ZZ”. Sintaxa „ușoară” este de asemenea acceptabilă aici. De exemplu, valorile „98-12-31” , „98.12.31” , „98/12/31” și „98@12@31” sunt echivalente.
  • Ca șir fără delimitatori în formatul „AAAAMMDDDHHMMSS” sau în formatul „AAMMDDDHHMMSS”, cu condiția ca șirul să fie înțeles ca dată. De exemplu, valorile „19970523091528” și „970523091528” pot fi interpretate ca „1997-05-23 09:15:28”, dar valoarea „971122129015” este nevalidă (valoarea secțiunii minute este absurdă) și este convertită în „0000-00-00 00:00:00” .
  • Ca șir fără delimitatori în formatul „AAAAMMZZ” sau în formatul „AAMMZZ”, cu condiția ca șirul să fie interpretat ca dată. De exemplu, valorile „19970523” și „970523” pot fi interpretate ca „1997-05-23” , dar valoarea „971332” este nevalidă (valorile secțiunii lunii și zilei sunt lipsite de sens) și este convertită în „ 0000-00-00" .
  • Ca număr în formatul YYYYMMDDHHMMSS sau în formatul YYMMDDHHMMSS, cu condiția ca numărul să fie interpretat ca dată. De exemplu, valorile 19830905132800 și 830905132800 sunt interpretate ca „1983-09-05 13:28:00” .
  • Ca număr în formatul AAAAMMZZ sau în formatul AAAMMZZ, cu condiția ca numărul să fie interpretat ca dată. De exemplu, valorile 19830905 și 830905 sunt interpretate ca „1983-09-05”.
  • Ca rezultat al executării unei funcții care returnează o valoare acceptabilă în contextul tipurilor de date DATETIME , DATE sau TIMESTAMP (de exemplu, funcțiile NOW() sau CURRENT_DATE).

Valorile nevalide ale valorilor DATETIME, DATE sau TIMESTAMP sunt convertite la valoarea „zero” a tipului de valoare corespunzător („0000-00-00 00:00:00”, „0000-00-00”, sau 00000000000000).

Pentru valorile reprezentate ca șiruri de caractere care conțin delimitatori între părțile datei, nu este nevoie să specificați două cifre pentru valorile lunii sau zilei mai mici de 10. Astfel, valoarea „1979-6-9” este echivalentă cu valoarea „1979-06-09”. De asemenea, pentru cantitățile reprezentate ca șiruri de caractere care conțin delimitatori în notația de timp, nu este nevoie să specificați două cifre pentru valorile ore, minute sau secunde mai mici de 10. Asa de,

Cantitățile definite ca numere trebuie să aibă 6, 8, 12 sau 14 zecimale. Se presupune că un număr de 8 sau 14 biți este în formatul AAAAMMDD sau, respectiv, AAAAMMDDDHHMMSS, cu anul în primele patru cifre. Dacă lungimea numărului este de 6 sau 12 cifre, se presupun următoarele formate: YYMMDD sau YYMMDDHHMMSS, unde anul este indicat în primele două cifre. Numerele a căror lungime nu se potrivește cu niciuna dintre opțiunile descrise sunt interpretate ca fiind completate cu zerouri până la cea mai apropiată lungime specificată.

Valorile reprezentate prin șiruri de caractere fără delimitatori sunt interpretate în funcție de lungimea lor conform regulilor de mai jos. Dacă lungimea șirului este de 8 sau 14 caractere, atunci se presupune că anul este dat de primele patru caractere. În caz contrar, se presupune că anul este dat de primele două caractere. Șirul este interpretat de la stânga la dreapta, dând valori pentru an, lună, zi, ore, minute și secunde pentru toate secțiunile reprezentate în șir. Aceasta înseamnă că un șir de mai puțin de 6 caractere nu poate fi utilizat. De exemplu, dacă setați un șir precum „9903” și credeți că înseamnă martie 1999, MySQL va insera o dată „nulă” în tabel. Anul și luna din această intrare sunt 99 și, respectiv, 03, dar secțiunea de zi lipsește (valoarea este zero), deci, în general, această valoare nu este o valoare de dată validă.

La stocarea valorilor valide în coloanele TIMESTAMP, se utilizează precizia completă specificată la specificarea acestora, indiferent de numărul de caractere ieșit. Această proprietate are mai multe consecințe:

  • Trebuie să specificați întotdeauna anul, luna și ziua, chiar și pentru tipurile TIMESTAMP(4) sau TIMESTAMP(2). În caz contrar, valoarea specificată nu va fi o valoare de dată validă și va fi stocată ca 0 .
  • Mărirea lățimii unei coloane TIMESTAMP înguste prin utilizarea comenzii ALTER TABLE va afișa informațiile „ascunse” anterior.
  • Și, în mod similar, atunci când restrângeți o coloană TIMESTAMP, informațiile stocate nu se vor pierde, cu excepția cazului în care țineți cont de faptul că mai puține informații vor fi scoase la ieșire.
  • Deși valorile TIMESTAMP sunt stocate cu precizie deplină, numai funcția UNIX_TIMESTAMP() poate funcționa direct pe această valoare stocată originală. Funcțiile rămase operează pe valori formatate ale valorii extrase. Aceasta înseamnă că funcții precum HOUR() sau SECOND() nu pot fi utilizate până când porțiunea corespunzătoare a valorii TIMESTAMP nu este inclusă în valoarea sa formatată. De exemplu, secțiunea HH a unei coloane TIMESTAMP nu va fi tipărită până când numărul de caractere de tipărit este de cel puțin 10, așa că încercarea de a utiliza HOUR() pe valori mai scurte TIMESTAMP va produce rezultate fără sens.

Valorile unui tip de dată pot fi, în unele cazuri, atribuite unui obiect de alt tip de dată. Cu toate acestea, este posibilă o anumită modificare a valorii sau pierderea informațiilor:

  • Dacă atribuiți o valoare DATE unui obiect DATETIME sau TIMESTAMP, partea „timp” a valorii rezultate va fi setată la „00:00:00”, deoarece valoarea DATE nu conține informații despre oră.
  • Dacă atribuiți o valoare de tip DATE , DATETIME sau TIMESTAMP unui obiect DATE, porțiunea „ora” a valorii rezultate va fi eliminată deoarece tipul DATE nu include informații despre oră.
  • Deși toate valorile DATETIME , DATE și TIMESTAMP pot fi specificate folosind același set de formate, rețineți că tipurile specificate au intervale diferite de valori valide. De exemplu, valorile TIMESTAMP nu pot avea valori ale datei mai devreme de 1970 sau mai târziu de 2037. Aceasta înseamnă că o dată precum „1968-01-01”, deși este legală pentru o valoare DATETIME sau DATE, nu este legală pentru o valoare TIMESTAMP și va fi convertită la 0 atunci când este atribuită acelui obiect.

Când setați valorile datei, ar trebui să aveți în vedere câteva capcane:

  • Formatul simplificat care este permis pentru valorile șirurilor poate induce în eroare. De exemplu, o valoare precum „10:11:12” ar putea fi o valoare de timp datorită separatorului „:”, dar atunci când este utilizată într-un context de dată, ar fi interpretată ca anul „2010-11-12”. În același timp, valoarea „10:45:15” va fi convertită în „0000-00-00”, deoarece valoarea „45” nu este valabilă pentru luna respectivă.
  • Serverul MySQL efectuează doar o verificare inițială a validității datei: zilele 00-31, lunile 00-12, anii 1000-9999. Orice dată în afara acestui interval este convertită în 0000-00-00. Trebuie menționat că, totuși, nu este interzisă stocarea datelor incorecte, cum ar fi 2002-04-31. Acest lucru permite aplicațiilor web să salveze datele formularului fără validare suplimentară. Pentru a asigura acuratețea datei, se efectuează o verificare în aplicația în sine.
  • Valorile anului, reprezentate de două cifre, permit o interpretare ambiguă, deoarece secolul este necunoscut. MySQL interpretează valorile anului din două cifre utilizând următoarele reguli:
    • Valorile anului din intervalul 00-69 sunt convertite în 2000-2069.
    • Valorile anului din intervalul 70-99 sunt convertite în 1970-1999.


Dacă aveți alte întrebări sau ceva nu este clar - bine ați venit pe site-ul nostru

Datele și orele YEAR, TIME, TIMESTAMP, DATE și DATETIME au propriul interval valori acceptabile, inclusiv valoarea „zero”, care este folosită atunci când utilizatorul introduce o valoare cu adevărat nevalidă.

Rețineți că MySQL poate stoca unele valori ale datei care nu sunt complet de încredere, de exemplu, 1999-11-31. Motivul pentru aceasta este că verificarea datei trebuie gestionată de aplicația specifică, nu de serverul SQL. Pentru a accelera validarea datei, MySQL verifică dacă luna este în intervalul 0-12 și ziua este în intervalul 0-31. Aceste intervale încep de la 0, astfel încât MySQL să poată stoca datele cu o zi și o lună de 0 în coloanele DATETIME sau DATE. Această opțiune este utilă, de exemplu, pentru aplicațiile care necesită stocarea unei date de naștere când luna sau ziua nașterii nu este întotdeauna cunoscut. Apoi data este stocată sub forma 1999-00-00 sau 1999-01-00 (pentru astfel de date funcțiile DATE_ADD sau DATE_SUB() pot da valori incorecte).

MySQL interpretează valorile în mai multe formate, dar se așteaptă întotdeauna ca datele să fie în ordinea an-lună-zi (de exemplu, „08-05-99”). O valoare care este de tip dată sau oră este convertită automat de MySQL într-un număr atunci când valoarea este utilizată ca număr și invers.

O valoare care este de tip dată sau oră și se află în afara intervalului specificat sau nu este validă pentru tipul de date dat este convertită în null de către MySQL. Excepție fac valorile TIME care depășesc intervalul specificat și sunt trunchiate la punctul de limită interval specificat TIMP.

Tabelul descrie formatele pentru valoarea „zero” pentru fiecare tip de coloană:

Emisiune din anul 2000 pentru tipuri de date

MySQL este rezistent la Y2K, dar unele valori de intrare pot fi predispuse la erori. De exemplu, dacă introduceți o valoare a anului din două cifre, aceasta va fi interpretată în mod ambiguu, deoarece secol nespecificat. Astfel de valori trebuie convertite în formă de 4 cifre, deoarece MySQL folosește 4 cifre pentru a reprezenta anul.

Datele cu un an ambiguu în MySQL pentru tipurile YEAR, TIMESTAMP, DATE și DATETIME sunt interpretate conform următoarelor reguli:

  • valoarea anului de la 00 la 69 este convertită în 2000–2069;
  • valorile anului cuprinse între 70 și 99 sunt convertite în 1970–1999.

Tip TIMESTAMP

Tipul TIMESTAMP înregistrează automat data și ora curentă atunci când se utilizează o operație INSERT sau UPDATE. Dacă sunt folosite mai multe coloane TIMESTAMP, numai prima este actualizată automat.

tip DATE

Tipul DATE conține valori cu informații despre dată în formatul „AAAA-LL-ZZ”. Pentru acest tip, anul poate varia în intervalul 1000–9999, iar valorile lunii și zilei pot varia în cadrul anului. Acestea. datele sunt procesate în intervalul „1000-01-01”–“9999-12-31”.

tip DATETIME

Tipul DATETIME este utilizat pentru valorile care conțin valori de dată și oră. MySQL procesează valori în formatul „AAAA-LL-ZZ HH:MM:SS”, care corespund intervalului „1000-01-01 00:00:00” - „9999-12-31 23:59:59 ".

Tastați TIME

MySQL procesează valori de acest tip în formatul „HH:MM:SS”. Pentru valori mari oră (când se specifică un interval de timp), este utilizat formatul „HHH:MM:SS”. Valori TIME trebuie să se încadreze în intervalul „-838:59:59” la „838:59:59”.

Tastați AN

Tipul de date YEAR este un tip de date pe un singur octet care conține valoarea anului.

MySQL procesează valorile în format YYYY și variază de la 1901 la 2155.

Valorile YEAR nevalide sunt convertite la 0000.

Scopul acestui articol este de a explica specificul lucrului cu tipurile DATETIME în SQL Server, inclusiv concepții greșite comune și recomandari generale pentru a le depăși. Datorită lui Frank Kalis, acest articol a fost tradus în germană.

Mulțumiri:

vreau să mulțumesc urmatoarele persoane pentru sugestiile și contribuțiile lor valoroase la acest articol: Steve Kass, Aaron Bertrand, Jacco Schalkwijk, Klaus Oberdalhoff, Hugo Kornelis, Dan Guzman și Erland Sommarskog.

versiuni SQL Server

Acest articol se aplică pentru SQL Server 7.0, 2000, 2005 și 2008, dacă nu este menționat altfel.

Tipuri de dată și oră în SQL Server

Înainte de SQL Server 2008, SQL Server avea două tipuri de date pentru gestionarea datei și orei. Deoarece ne vom referi la aceste tipuri foarte des în acest articol, vom introduce o abreviere pentru fiecare tip în cele două tabele de mai jos (coloana SC):

Nume

Min. sens

Max. sens

Precizie

Memoria folosită

smalldatetime sdt 1900-01-01 00:00:00 2079-06-06 23:59:00 minut 4 octeți
datetime dt 1753-01-01 00:00:00.000 9999-12-31 23:59:59.997 3,33 ms 8 octeți

Vă rugăm să rețineți că aici nu există niciun tip de date care să conțină doar o dată sau doar o oră. Ambele tipuri de date de mai sus constau din părți/segmente, cum ar fi data și ora.

Dacă specificați doar partea dată, SQL Server va stoca ora ca 00:00:00.000.
Și dacă setați valoarea doar la ora, SQL Server va stoca data ca 01/01/1900.
Este foarte important. Citește-l din nou.

SELECTAȚI CAST (‘20041223’AS datetime )

———————–
2004-12-23 00:00:00.000

SELECTAȚI CAST (’14:23:58′ AS datetime )

———————–
1900-01-01 14:23:58.000

Odată cu apariția SQL Server 2008, au fost introduse mai multe tipuri de date noi asociate cu valorile datei și orei:

Nume

Min. sens

Max. sens

Precizie

Memoria folosită

datatime2 dt2 0001-01-01 00:00:00.0000000 9999-12-31 23:59:59.9999999 100 ns 6-8 octeți
Data d 0001-01-01 9999-12-31 zi 3 octeți
timp t 00:00:00.0000000 23:59:59.9999999 100 ns 3-5 octeți
datetimeoffset dto 0001-01-01 00:00:00.0000000 9999-12-31 23:59:59.9999999 100 ns 8-10 octeți
  • După cum puteți vedea, am primit în sfârșit tipuri de date numai pentru date ( Data) și numai pentru timp ( timp).
  • Datatime2 aceasta este „cea mai bună DATETIME” din mai multe motive și nu necesită multe mai multa memorie, Cum datetimeși posibil chiar mai puțin!
  • Pentru un tip nou care implică o valoare de timp, puteți specifica „precizia fracțională de secunde” specificând ordinea cifrelor utilizate în secunde după virgulă zecimală. Deci time(3) poate stoca valori precum 14:23:12.567, care, atunci când sunt introduse ca 14:23:12:5677, sunt rotunjite la 14:23:12:568.
  • Tip nou datetimeoffset conține o parte din offset-ul de fus orar local.

Formate de dată și oră

O concepție greșită comună este că SQL Server stochează aceste tipuri de date într-un anumit format care poate fi citit. Este gresit. SQL Server stochează astfel de valori în formatul său intern (de exemplu, două numere întregi pentru datetimeȘi smalldatetime). Acestea fiind spuse, atunci când utilizați T-SQL pentru a seta o valoare (de exemplu într-o instrucțiune INSERT) o exprimați ca șir de text. Există, de asemenea, reguli de interpretare de către SQL Server diverse formateșiruri de date. Dar rețineți că SQL Server nu își va aminti acest format în niciun caz.

Formate de intrare pentru dată și oră

Există multe formate disponibile pentru conversia valorilor în dată/oră/date și oră. Unele dintre ele sunt „mai bune” decât altele, iar mai târziu vei înțelege de ce „mai bine”. Este de remarcat faptul că toate aceste formate sunt aplicabile pentru toate tipurile. Deci, chiar și formatul „numai oră” este aplicabil pentru tipul „numai dată”, etc. (Acest articol ignoră partea de compensare a fusului orar local, care este utilizată numai în tipul de date datetimeoffset– mai multe despre care în Cărți online.)

Nume

Format

SETARE DATEFORMAT dependență

SETARE dependență de LIMBA

Neutralitatea limbajului

Neseparat u ‘19980223 14:23:05’ Nu Nu pentru toți
Separat s '23.02.1998 14:23:05' pentru toți pentru toți Nu
ANSI SQL ansisql ‘1998-12-23 14:23:05’ sdt , dt sdt , dt nu pentru sdt Și dt
Alfabetic A ’23 februarie 1998 14:23:05′ Nu pentru toată lumea (numele lunii) Nu
Data ODBC odt (ts „1998-02-23 14:23:05”) Nu Nu pentru toți
data ODBC od (d „23-02-1998”) Nu Nu pentru toți
Ora ODBC ot (la ’14:23:05′) Nu Nu pentru toți
ISO 8601 izo „1998-02-23T14:23:05” Nu Nu pentru toți
Timp t „14:23:05”
„2:23:05 PM”
Nu Nu pentru toți
  • Rețineți că ANSI SQL cu adevărat numai caz special format delimitat Separat(așa-numitul „digital”), folosind liniuță (-), bară oblică (/) și punct (.) ca delimitatori. Dar, întrucât acesta este singurul format definit în standardul ANSI SQL, în opinia autorului merită menționat ca caz special.
  • Majoritatea formatelor vă permit să eliminați porțiunea de dată și/sau oră, iar în unele cazuri acest lucru poate părea puțin... ciudat. Ar părea nerezonabil să specificați, de exemplu, „2008-08-25” ca tip de timp ( timp), dar în rezultat final aceasta este același lucru cu a nu seta valorile în șir datetime. Luați în considerare mai jos:
    SELECTAȚI CAST (LA FEL DE timp )
    SELECTAȚI CAST (‘2008-08-25’ AS timp )

    Ambele interogări produc același rezultat (ora 00:00:00).
  • formatele ODBC ( Data ODBC, data ODBC, ora ODBC) sunt diferite prin faptul că au un simbol (literal_type, t, d sau ts) care trebuie setat corect, în funcție de dacă obțineți o dată și o oră, doar o dată sau doar o oră.
  • Pentru a aplica formatul ISO 8601 este necesar un segment de dată și oră.
  • SET DATEFORMAT moștenește setările din SET LANGUAGE (dar un SET DATEFORMAT explicit înlocuiește un SET LANGUAGE ulterioară). Setările implicite de limbă sunt setate pentru fiecare limbă utilizată la introducerea datelor de conectare. Limba implicită de conectare este setată folosind sp_configure.
  • Regulile privind formatarea datei și noile tipuri pot fi confuze. Microsoft se angajează să actualizeze noi tipuri de date relevante ( date, datetime2 și datetimeoffset) era mai puțin dependentă de setări și chiar mai compatibil cu cerințele ANSI SQL. Și, ca rezultat, noi tipuri neutre din punct de vedere al limbii pentru evidențierea componentelor dată-oră, atâta timp cât anul este primul. SQL Server este necesar să se stabilească că această parte este anul și, prin urmare, sunt necesare 4 poziții care alcătuiesc anul (aaaa, nu aa). Dacă da, șirul va fi interpretat ca mai întâi anul, apoi luna și, în final, ziua - indiferent de DATEFORMAT sau setările de limbă. Dacă luna este specificată mai întâi, atunci setările DATEFORMAT și limba vor fi „onorate”:
    A STABILIT LIMBA engleză – folosește dmy
    MERGE
    SELECTAȚI CAST (’23-02-1998 14:23:05′ LA FEL DE Data ) -Eroare
    MERGE
    SELECTAȚI CAST (‘2/23/1998 14:23:05’ LA FEL DE Data ) -Eroare
    MERGE
    SELECTAȚI CAST (‘1998-02-23 14:23:05’ LA FEL DE Data ) -Bine
    MERGE
    SELECTAȚI CAST (‘1998.02.23 14:23:05’ LA FEL DE Data ) -Bine
    MERGE
    SELECTAȚI CAST (‘1998/02/23 14:23:05’ LA FEL DE Data) -Bine
    MERGE
    Primul
    două interogări sunt incorecte deoarece anul nu este pe prima poziție (și nu există 23 de luni în 1998). Nu există erori în următoarele trei interogări, deoarece cerințele sunt îndeplinite și anul este listat primul (și folosim unul dintre noile stiluri de tip de dată). Extrem de transparent, nu? 🙂

Descrierile formatelor disponibile sunt disponibile în Cărți online, așa că nu are rost să intrăm în detalii pentru fiecare format.

Dezvoltarea aplicațiilor de baze de date bazate pe timp în SQL de Richard T. Snodgrass: conține o mulțime de informații despre reprezentarea informațiilor bazate pe timp într-un model de date. Și, desigur, este posibil să utilizați aceste informații suplimentare (istorice) în dvs interogări SQL. Această carte este epuizată, dar pe site-ul oficial al lui Richard (www.cs.arizona.edu/people/rts), o puteți descărca gratuit în format PDF.

Traducere: Vinchik Evgeniy

tipuri de date de dată și oră: DATETIME, DATE, TIMESTAMP, TIME și YEAR. Fiecare dintre acestea are o gamă de valori valide, precum și o valoare „null”, care este utilizată atunci când utilizatorul introduce o valoare cu adevărat nevalidă. Rețineți că MySQL vă permite să stocați unele valori ale datei care nu sunt complet de încredere, de exemplu 1999-11-31. Motivul este că gestionarea validării datei este responsabilitatea aplicație specifică, nu servere SQL. Pentru a accelera validarea datei, MySQL verifică doar dacă luna se află în intervalul 0-12 și ziua este în intervalul 0-31. Aceste intervale încep de la 0, acest lucru se face pentru a oferi MySQL posibilitatea de a stoca date în care ziua sau luna se află în coloanele DATE sau DATETIME egal cu zero. Această caracteristică este utilă în special pentru aplicațiile care necesită stocarea datei nașterii - aici ziua sau luna nașterii nu este întotdeauna cunoscută. În astfel de cazuri, data este pur și simplu stocată ca 1999-00-00 sau 1999-01-00 (dar nu trebuie să vă așteptați ca funcțiile DATE_SUB() sau DATE_ADD să returneze valorile corecte pentru astfel de date).

MySQL preia valorile pentru un anumit tip de dată sau oră numai în format standard, dar în același timp încearcă să interpreteze o varietate de formate care pot proveni de la utilizatori (de exemplu, atunci când se specifică o valoare căreia ar trebui să i se aloce un tip de dată sau oră sau comparată cu o valoare care are unul dintre aceste tipuri). Cu toate acestea, sunt acceptate doar formatele descrise în următoarele secțiuni. Se așteaptă ca utilizatorul să introducă valori valide pentru cantități, deoarece utilizarea cantităților în alte formate poate produce rezultate imprevizibile.

  • Deși MySQL încearcă să interpreteze valori în mai multe formate, în toate cazurile este de așteptat ca secțiunea cu valoarea datei care conține anul să fie în extrema stângă. Datele trebuie specificate în ordinea an-lună-zi (de exemplu, „98-09-04”), și nu în ordinea lună-zi-an sau zi-lună-an, i.e. nu cum le scriem de obicei (de exemplu, „09-04-98”, „04-09-98”).
  • MySQL convertește automat o valoare de dată sau oră într-un număr atunci când valoarea este utilizată într-un context numeric și invers.
  • O valoare a unui tip de dată sau oră care se află în afara intervalului specificat sau nu este validă pentru acel tip de date (vezi începutul secțiunii) este convertită în valoarea „null” pentru acel tip. (Excepția este pentru valorile de tip TIME care depășesc limitele intervalului specificat, care sunt trunchiate la punctul de limită corespunzător al intervalului TIME specificat). În tabelul 4.3. Iată formatele pentru valoarea „null” pentru fiecare tip de coloană:
  • Valorile zero sunt speciale. Pentru a le stoca sau a le face referire, puteți folosi în mod explicit valorile prezentate în tabel sau puteți folosi „0”, care este mai ușor de scris.
Tipuri de date DATETIME, DATE și TIMESTAMP

Tipul de date DATETIME este utilizat pentru valorile care conțin atât informații despre dată, cât și despre oră. MySQL preia și afișează valorile DATETIME în formatul „AAAA-LL-ZZ HH:MM:SS”. Intervalul de valori acceptat este de la „1000-01-01 00:00:00” la „9999-12-31 23:59:59”. ("acceptat" înseamnă că, deși valorile cu valori de timp anterioare pot funcționa în continuare, nu există nicio garanție că vor fi stocate și afișate corect).

Tipul DATE este utilizat pentru valorile cu doar informații despre dată, fără o parte de timp. MySQL preia și afișează valorile DATE în formatul „AAAA-LL-ZZ”. Intervalul de valori acceptat este de la „1000-01-01” la „9999-12-31”.

Tipul de coloană TIMESTAMP oferă un tip de reprezentare a datelor care poate fi utilizat pentru a înregistra automat data și ora curentă atunci când se efectuează o operație INSERT sau UPDATE. Dacă aveți mai multe coloane TIMESTAMP, numai prima este actualizată automat.

Pentru coloanele rămase (cu excepția primelor) de tip TIMESTAMP, puteți seta și valoarea la data și ora curente. Pentru a face acest lucru, trebuie pur și simplu să setați coloana la NULL sau NOW() .

Orice coloană TIMESTAMP (chiar și prima coloană de acel tip) poate fi setată la o altă valoare decât data și ora curente. Acest lucru se face prin setarea explicită la valoarea dorită. Această proprietate poate fi utilizată, de exemplu, dacă doriți să setați coloana TIMESTAMP la data și ora curentă atunci când creați un rând și atunci când actualizați ulterior acel rând, valoarea coloanei nu ar trebui să se modifice.

Valorile TIMESTAMP pot varia de la începutul anului 1970 până la o anumită valoare în 2037, cu o rezoluție de o secundă. Aceste cantități sunt afișate ca valori numerice.

Formatul de date în care MySQL preia și afișează valorile TIMESTAMP depinde de numărul de caractere afișat. Acest lucru este ilustrat în Tabelul 4.4. Formatul complet TIMESTAMP are 14 zecimale, dar puteți crea coloane TIMESTAMP cu un șir de ieșire mai scurt:

Tabelul 4.4. Format de date TIMESTAMP în funcție de numărul de cifre extrase
Tip de coloană Format de iesire
TIMESTAMP(14) AAAAMMDDDHHMMSS
TIMESTAMP(12) YYMMDDHHMMSS
TIMESTAMP(10) AAAMMDDHHMM
TIMESTAMP(8) YYYYMMDD
TIMESTAMP(6) AAAMMDD
TIMESTAMP(4) YYMM
TIMESTAMP(2) YY

Valorile DATETIME, DATE și TIMESTAMP pot fi setate la oricare set standard formate:

  • Ca șir în formatul „AAAA-LL-ZZ HH:MM:SS” sau în formatul „AA-LL-ZZ HH:MM:SS”. Sintaxa „ușoară” este permisă - puteți utiliza orice semn de punctuație ca separator între părți ale secțiunilor de dată sau oră. De exemplu, valorile „98-12-31 11:30:45”, „98.12.31 11+30+45”, „98/12/31 11*30*45” și „98@12@31” 11^30^ 45" sunt echivalente.
  • Ca șir în formatul „AAAA-LL-ZZ” sau în formatul „AA-LL-ZZ”. O sintaxă „ușoară” este, de asemenea, acceptabilă aici. De exemplu, valorile „98-12-31”, „98.12.31”, „98/12/31” și „98@12@31” sunt echivalente.
  • Ca șir fără delimitatori în formatul „AAAAMMDDDHHMMSS” sau în formatul „AAMMDDDHHMMSS”, cu condiția ca șirul să fie înțeles ca dată. De exemplu, valorile „19970523091528” și „970523091528” pot fi interpretate ca „1997-05-23 09:15:28”, dar valoarea „971122129015” este nevalidă (valoarea secțiunii minute este absurdă) și este convertită la „0000-00-00 00:00:00”.
  • Ca șir fără delimitatori în formatul „AAAAMMZZ” sau în formatul „AAMMZZ”, cu condiția ca șirul să fie interpretat ca dată. De exemplu, valorile „19970523” și „970523” pot fi interpretate ca „1997-05-23”, dar valoarea „971332” este nevalidă (valorile secțiunii lunii și zilei sunt lipsite de sens) și este convertită în „ 0000-00-00".
  • Ca număr în formatul YYYYMMDDHHMMSS sau în formatul YYMMDDHHMMSS, cu condiția ca numărul să fie interpretat ca dată. De exemplu, valorile 19830905132800 și 830905132800 sunt interpretate ca „1983-09-05 13:28:00”.
  • Ca număr în formatul AAAAMMZZ sau în formatul AAAMMZZ, cu condiția ca numărul să fie interpretat ca dată. De exemplu, valorile 19830905 și 830905 sunt interpretate ca „1983-09-05”.
  • Ca rezultat al executării unei funcții care returnează o valoare acceptabilă în contextul tipurilor de date DATETIME , DATE sau TIMESTAMP (de exemplu, funcțiile NOW() sau CURRENT_DATE()).
Tip de date TIME

MySQL preia și afișează valorile TIME în formatul „HH:MM:SS” (sau în formatul „HHH:MM:SS” pentru valori mai mari ale orei). Valorile TIME pot varia de la „-838:59:59” la „838:59:59”. Motivul pentru care partea „oră” a unei valori poate fi atât de mare este că tipul TIME poate fi folosit nu numai pentru a reprezenta ora din zi (care trebuie să fie mai mică de 24 de ore), ci și pentru a reprezenta timpul total scurs sau intervalul de timp dintre două evenimente (care poate fi semnificativ mai mare de 24 de ore sau chiar negativ).

Valorile TIME pot fi specificate în diferite formate:

Ca șir în formatul „D HH:MM:SS.fractional part” (rețineți că MySQL nu acceptă încă stocarea părții fracționale a unei valori într-o coloană de tipul în cauză). De asemenea, puteți utiliza una dintre următoarele vizualizări „ușoare”: HH:MM:SS.parte fracționată, HH:MM:SS , HH:MM , D HH:MM:SS , D HH:MM , D HH sau SS . Aici D sunt zile din intervalul de valori 0-33.

  • Ca șir fără delimitatori în formatul „HHMMSS”, cu condiția ca șirul să fie interpretat ca dată. De exemplu, valoarea „101112” este înțeleasă ca „10:11:12”, dar valoarea „109712” ar fi nevalidă (valoarea secțiunii minute este absurdă) și ar fi convertită în „00:00:00”.
  • Ca număr în format HHMMSS, cu condiția ca șirul să fie interpretat ca dată. De exemplu, valoarea 101112 este înțeleasă ca „10:11:12”. MySQL înțelege, de asemenea, următoarele formate alternative: SS
  • Ca un număr din patru cifre în intervalul 1901-2155.
  • Ca șir de două caractere în intervalul de valori de la „00” la „99”. Valorile în intervalele de la „00” la „69” și de la „70” la „99” sunt apoi convertite în valori de AN în intervalele de la 2000 la 2069 și, respectiv, de la 1970 la 1999.
  • Ca un număr din două cifre în intervalul de la 1 la 99. Valorile din intervalele de la 1 la 69 și de la 70 la 99 sunt apoi convertite în valori YEAR în intervalele de la 2001 la 2069 și de la 1970 la 1999, respectiv. Vă rugăm să rețineți că spațierea pentru numerele din două cifre și șirurile din două cifre este ușor diferită, deoarece nu puteți specifica „zero” direct ca număr și să îl interpretați ca 2000. Trebuie să îl specificați ca șir „0” sau „00” sau va fi interpretat ca 0000.
  • Ca rezultat al executării unei funcții care returnează o valoare acceptabilă în contextul unui tip de date YEAR (cum ar fi NOW() ).

Valorile YEAR nevalide sunt convertite la 0000.

Tipurile DATETIME, DATE și TIMESTAMP

Tipurile DATETIME, DATE și TIMESTAMP sunt legate între ele. Această secțiune descrie caracteristicile lor, cum sunt similare și cum diferă.
Tipul DATETIME este folosit atunci când trebuie să aveți valori care includ atât data, cât și ora. MySQL preia și afișează valorile DATETIME în formatul TGGT-MM-DD HH:MM:SS". Intervalul de valori acceptat pentru acestea este de la „1000-01-01 00:00:00” la „9999- 12-31 23:59:59" (Acceptat înseamnă că valorile anterioare pot funcționa, dar nu sunt garantate.)
Tipul DATE este folosit atunci când trebuie să aveți valori care includ doar data, fără ora. MySQL preia și afișează valorile DATETIME în formatul „AAAA-LL-ZZ”. Intervalul acceptat este de la CH000-01-0G la „9999-12-31”.
Tipul de coloană TIMESTAMP are un număr de proprietăți care depind de versiunea MySQL și de modul SQL în care rulează serverul. Aceste proprietăți sunt descrise mai târziu în această secțiune.
Puteți specifica valori pentru tipurile DATETIME, DATE și TIMESTAMP utilizând oricare dintre seturile de formate general acceptate:

  1. Ca șir în formatul „AAAA-LL-ZZ HH:MM:SS” sau „AA-LL-ZZ HH:MM:SS. Sintaxa relaxată este permisă: orice caracter de punctuație poate fi folosit ca delimitator între dată și oră. De exemplu, „98-12-31 11:30:45”, „98.12.31 11+30+45”, „98/12/31 11*30*45” și „98012031 11Л30Л45” sunt echivalente.
  2. Ca șir în formatul „AAAA-LL-ZZ” sau „AA-LL-ZZ”. Sintaxa relaxată este, de asemenea, permisă. De exemplu, următoarele valori sunt echivalente: „98-12-31”, „98.12.31”, „98/12/31” și „98012031”.
  3. Ca șir fără delimitatori în formatul „AAAAMMDDDHHMMSS” sau „AAMMDDDHHMMSS”, presupunând că șirul are sens ca dată. De exemplu, „19970523091528” și „970523091528” sunt interpretate ca „1997-0 5-23 09:15:28”, dar „971122129015” este incorect (deoarece are o valoare de minute fără sens) și devine „0000-0000- 00:00": 00".
  4. Ca șir nelimitat în formatul „AAAAMMDD” sau TGMMDD”, presupunând că șirul are sens ca dată. De exemplu, „19970523” și „980523” sunt interpretate ca „1997-05-23”, dar „971332” este incorect ( valoare incorectă lună și zi) și devine „0000-00-00”.
  5. Ca număr în formatul YYYYMMDDDHHMMSS sau AAAMMDDDHHMMSS, presupunând că numărul are sens ca dată. De exemplu, 19830905132800 și 830905132800 sunt interpretate ca „1983-09-05 13:28:00”.
  6. Ca număr în formatul YYYYMMDD sau AYMMDD, presupunând că numărul are sens ca dată. De exemplu, 19830905 și 830905 sunt interpretate ca „1983-09-05”.
  7. Ca rezultat al unei funcții care returnează o valoare acceptabilă în contextul DATETIME, DATE sau TIMESTAMP, cum ar fi NOW() sau CURRENT_DATE.

Valorile invalide DATETIME, DATE sau TIMESTAMP sunt convertite în valori nule de tipul adecvat ("0000-00-00 00:00:00", "0000-00-00" sau 000000000000000).
Pentru valorile specificate ca șir care include un separator de dată, nu este nevoie să specificați două cifre pentru lună sau zi care sunt mai mici de 10. „1976-6-9” este același cu „1976-06-09” . De asemenea, pentru valorile specificate ca șir care include un separator de timp, nu trebuie să specificați două cifre pentru ore, minute și secunde care sunt mai mici de 10. „1979-10-30 1:2:3” este la fel ca acel „1979-10-30 01:02:03”.


Valorile specificate ca număr trebuie să aibă 6, 8, 12 sau 14 cifre. Dacă un număr are 8 sau 14 cifre, se presupune că se specifică o valoare în formatul YYYYMMDD sau AAAAMMDDDHHMMSS și că anul este specificat în patru cifre. Dacă numărul are lungimea de 6 sau 12, se presupune că se specifică o valoare în formatul YYMMDD sau YYMMDDDHHMMSS, iar anul este specificat în două cifre. Alte numere decât 6, 8, 12 și 14 în lungime sunt completate cu zerouri de început până la cel mai apropiat număr de cifre din seria specificată.

Valorile specificate ca șir nelimitat sunt interpretate folosind lungimea lor așa cum este descris mai sus. Dacă șirul are 8 sau 14 caractere, se presupune că anul este în format de 4 cifre. În caz contrar, se presupune că anul este dat de primele două cifre. Șirul este interpretat de la stânga la dreapta pentru a extrage valorile anului, lunii, zilei, orelor, minutelor și secundelor. Aceasta înseamnă că nu trebuie să utilizați linii mai mici de 6 caractere. De exemplu, dacă specificați „9903” adică martie 1999, veți descoperi că MySQL va insera o dată nulă în tabel. Acest lucru se întâmplă deoarece valorile anului și lunii sunt 99 și 03, dar partea de zi lipsește complet, ceea ce înseamnă că această valoare nu setează data corectă. Cu toate acestea, începând cu MySQL 3.23, puteți specifica în mod explicit valoare nulă lună sau zi. De exemplu, puteți specifica „990300” pentru a insera valoarea „1999-03-00” în tabel.
În anumite limite, puteți atribui valori de un tip obiectelor de alt tip. Cu toate acestea, este posibilă o anumită distorsiune cu pierderea de informații:

  1. Dacă atribuiți o valoare de tip DATE unui obiect de tip DATETIME sau TIMESTAMP, se presupune că porțiunea de timp a valorii este „00:00:00”, deoarece valorile DATE nu conțin informații despre oră.
  2. Dacă atribuiți o valoare de tip DATETIME sau timeTAMP unui obiect de tip DATE, partea de timp a valorii se pierde deoarece DATE nu o poate include.
  3. Rețineți, deși valorile DATETIME, DATE și TIMESTAMP pot fi specificate folosind același set de formate, intervalele lor valide diferă. De exemplu, valorile TIMESTAMP nu pot fi mai devreme de 1970 sau mai târziu de 2037. Aceasta înseamnă că o dată precum „1968-01-10”, care este bună ca valoare DATETIME sau DATE, este incorectă ca TIMESTAMP și va fi convertită la 0 atunci când este atribuită unui astfel de obiect.

De asemenea, ar trebui să fiți conștienți de unele capcane atunci când specificați valorile datei:

  1. Formatul relaxat al valorilor date ca șiruri de caractere poate induce în eroare. De exemplu, o valoare precum „10:11:12” poate părea a fi o oră, deoarece folosește delimitatorul „:”, dar dacă este folosită într-un context de dată, va fi interpretată ca „2010-11-12”. În același timp, valoarea „10:45:15”
    va fi convertit în „0000-00-00” deoarece „45” nu este o lună validă.
  2. Serverul MySQL se execută doar verificare de bază valabilitatea datei: intervalele pentru an, lună și zi sunt, respectiv, de la 1000 la 9999, de la 00 la 12 și de la 00 la 31. Orice date care conțin părți în afara acestor intervale sunt supuse conversiei în „0000-00-00”. Rețineți că acest lucru vă permite să stocați date nevalide precum „2002-04-31”. Pentru a vă asigura că data este corectă, verificați în aplicație.
  • Datele care conțin un an cu două cifre sunt ambigue, deoarece secolul este necunoscut. MySQL interpretează anii din două cifre după cum urmează: * Un an din intervalul 00-69 este convertit în 2000-2069.
  • Un an în intervalul 70-99 este convertit în 1970-1999.
Proprietățile TIMESTAMP în versiunile MySQL anterioare 4.1
TIMESTAMP este un tip de coloană care poate fi utilizat pentru a ștampila automat data și ora curentă atunci când se efectuează o operație UPDATE sau INSERT. Dacă într-un tabel există mai multe coloane TIMESTAMP, numai prima este actualizată automat.
Prima coloană TIMESTAMP dintr-un tabel este actualizată automat atunci când apare una dintre următoarele condiții:
  1. Când îi atribuiți în mod explicit valoarea NULL.
  2. Coloana nu este specificată în mod explicit în instrucțiunea INSERT sau LOAD DATA INFILE.
  3. Coloana nu este specificată în mod explicit în instrucțiunea UPDATE, dar valoarea unei alte coloane este modificată. O instrucțiune UPDATE care setează o coloană la aceeași valoare pe care a avut-o anterior nu actualizează coloana TIMESTAMP. Dacă atribuiți o valoare veche, MySQL o ignoră din motive de eficiență.

Coloanele TIMESTAMP pot fi, de asemenea, actualizate cu data și ora curente dacă sunt setate în mod explicit la valoarea dorită. Acest lucru este valabil chiar și pentru prima coloană TIMESTAMP. Puteți utiliza această proprietate, de exemplu, dacă doriți să setați valoarea unei coloane la data curentași ora la crearea rândului, dar nu îl modificați la actualizările ulterioare ale rândului:

  1. Lăsați MySQL să seteze valoarea coloanei atunci când creați rândul. Aceasta îl inițializează cu valoarea curentă a datei și orei.
  2. Când efectuați actualizări ulterioare pentru alte coloane de rând, setați coloana TIMESTAMP la valoarea sa actuală:

ACTUALIZAȚI nume_tabel
A STABILIT coloană_ imes tamp- column_Ytestamp, other_column1 = new_value1, other_column2= obiecție_nouă2,...
O altă modalitate de a menține o coloană care înregistrează timpul de creare a unui rând este să utilizați o coloană DATETIME care este inițializată la NOW() atunci când rândul este creat și nu este modificată ulterior.
Valorile TIMESTAMP pot varia de la începutul anului 1970 până la o parte a anului 2037, cu o rezoluție de o secundă. Valorile sunt afișate ca numere.
Formatul în care MySQL preia și afișează valorile TIMESTAMP depinde de lățimea afișajului, așa cum este ilustrat în Tabelul 1. 4.3. Formatul complet TIMESTAMP are 14 biți, dar coloanele TIMESTAMP pot fi definite într-un format de afișare mai scurt.

Tabel Dependența formatului de afișare de lățime

Toate coloanele TIMESTAMP au aceeași dimensiune de stocare, indiferent de formatul de afișare. Cele mai utilizate formate sunt 6, 8, 12 și 14 caractere. Puteți specifica o dimensiune de afișare personalizată atunci când creați tabelul, dar valorile 0 și mai mari decât 14 sunt scalate la 14. Valorile impare de la 1 la 13 sunt scalate la cel mai apropiat număr par.
Coloanele TIMESTAMP stochează valori valide folosind precizia completă cu care au fost specificate, indiferent de lățimea afișajului. Cu toate acestea, există câteva limitări asociate cu aceasta:

  1. Trebuie să specificați întotdeauna anul, luna și ziua, chiar dacă coloana este declarată ca TIMESTAMP(4) sau TIMESTAMP(2). În caz contrar, valoarea este considerată incorectă și este stocată la 0.
  2. Dacă utilizați tabelul ALTER pentru a extinde coloana TIMESTAMP, informațiile care au fost ascunse anterior vor fi evidențiate.
  3. De asemenea, atunci când restrângeți o coloană TIMESTAMP, nu se pierde nicio informație, cu excepția faptului că vor fi scoase mai puține informații decât înainte.
  4. Deși coloanele TIMESTAMP sunt stocate cu precizie deplină, singura funcție care operează pe întreaga cantitate de informații stocate în ele este UNIX_TIMESTAMP(). Toate celelalte funcții operează pe valoarea extrasă formatată. Aceasta înseamnă că nu puteți utiliza o funcție precum HOUR() sau SECOND() decât dacă partea corespunzătoare este inclusă în valoarea formatată a coloanei. De exemplu, porțiunea HH a unei coloane TIMESTAMP nu va fi afișată decât dacă lățimea de afișare a acesteia este de cel puțin 10, așa că aplicarea HOURO la valori mai scurte TIMESTAMP va produce un rezultat lipsit de sens.
Proprietăți TIMESTAMP în MySQL versiunea 4.1 și mai recentă
Începând cu MySQL 4.1, proprietățile TIMESTAMP sunt diferite de cele din versiunile anterioare: coloanele TIMESTAMP sunt afișate în același format ca și coloanele DATETIME.
  • Lățimea afișajului nu mai este acceptată așa cum este descris anterior. Cu alte cuvinte, nu mai puteți folosi TIMESTAMP(4) sau TIMESTAMP(2). În plus, dacă Server MySQL lansat în modul MAXDB, tipul TIMESTAMP este identic cu datetime. Adică, dacă serverul rulează în modul MAXDB în momentul creării tabelului, orice coloană TIMESTAMP este creată ca DATETIME. Ca urmare, aceste coloane folosesc formatul de afișare DATETIME, au același interval de valori valide și nu au nicio actualizare automata nu se intampla.
În modul MAXDB, serverul MySQL poate fi lansat începând cu versiunea 4.1.1. Pentru a activa acest mod, specificați opțiunea -sql-mode=MAXDB la pornirea serverului sau setați valoarea variabilei globale sqljnode în timpul rulării:
mysql SET GLOBAL sql_mode=MAXDB;
Un client poate forța serverul să ruleze în modul MAXDB pentru propria sa sesiune folosind comanda:
mysql SETĂ SESIUNE sql_mode=MAXDB;