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 -- ավտոմատ թարմացում փոփոխության ժամանակ
);