Sobes.tech
Junior

Նկարագրեք DATETIME և TIMESTAMP տվյալների տեսակների տարբերությունը։

sobes.tech AI

Պատասխան AI-ից

Հիմնական տարբերությունները DATETIME և TIMESTAMP միջև մեծ մասի SQL տվյալների բազաներում (օրինակ, MySQL) հետևյալն են՝

  • Պահպանում:

    • DATETIME պահպանում է տարի, ամիս, օր, ժամ, րոպե, վայրկյան:
    • TIMESTAMP պահպանում է սեկունդների քանակը Unix ժամանակագրության սկզբից (1 հունվար 1970, UTC):
  • Արժեքների տիրույթ:

    • DATETIME սովորաբար ունի ավելի լայն տիրույթ (օրինակ, '1000-01-01 00:00:00'-ից '9999-12-31 23:59:59'):
    • TIMESTAMP ունի սահմանափակ տիրույթ, կախված 32-բիթ կամ 64-բիթ ներկայացումից, սովորաբար մինչև 2038 թվականը 32-բիթի համար:
  • Ժամային գոտի:

    • DATETIME չի կախված ժամային գոտուց և պահպանում է ճշգրիտ մուտքագրված արժեքը:
    • TIMESTAMP փոխարկվում է ընթացիկ ժամային գոտուց UTC-ին պահպանումիս և հետագա ընթերցման ժամանակ, այդ պատճառով արժեքը կախված է հաճախորդի ժամային գոտուց:
  • Չափը:

    • Պահպանումը կարող է փոքր-ինչ տարբեր լինել, բայց հաճախ TIMESTAMP-ը փոքր է (4 բայթ) DATETIME-ից (8 բայթ):
  • Ավտոմատ թարմացում:

    • TIMESTAMP-ը կարող է կազմաձևվել ավտոմատ թարմացման համար փոփոխության ժամանակ (եթե օգտագործվում է որպես կանխադրված կամ ON UPDATE CURRENT_TIMESTAMP), ինչը հարմար է վերջին փոփոխության ժամանակը հետևելու համար:
    • DATETIME-ը նման հնարավորություն չունի (համենայն դեպս, կարելի է հասնել Triggers-ով):

Համեմատության աղյուսակ՝

Գծագրություն DATETIME TIMESTAMP
Պահպանում ձևաչափը Տարի, ամիս, օր, ժամ, րոպե, վայրկյան Սեկունդներ Unix ժամանակագրությունից (UTC)
Ժամային գոտի Անկախ ժամային գոտուց Զависում հաճախորդի ժամային գոտուց
Վարժական տիրույթ Սովորաբար լայն, մինչև 9999 թվականը Սահմանափակ, սովորաբար մինչև 2038 թվականը
Ավտոմատ թարմացում Չկա (ներդրված) Կա (ընտրովի, ON UPDATE CURRENT_TIMESTAMP)
Տիպի չափը 8 բայթ 4 բայթ

SQL օրինակ՝ տախտակների ստեղծման համար՝

-- `DATETIME`-ով օրինակային տախտակ
CREATE TABLE events_datetime (
    id INT PRIMARY KEY,
    event_name VARCHAR(255),
    event_time DATETIME
);

-- `TIMESTAMP`-ով օրինակային տախտակ
CREATE TABLE events_timestamp (
    id INT PRIMARY KEY,
    event_name VARCHAR(255),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- ավտոմատ ստեղծման ժամանակի սահմանում
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP -- ավտոմատ թարմացում փոփոխության ժամանակ
);