Sobes.tech
Junior

DATETIME жана TIMESTAMP маалымат түрлөрүнүн айырмасын сүрөттөп бериңиз.

sobes.tech AI

AIден жооп

Көптөгөн SQL базаларында DATETIME жана TIMESTAMP ортосунда негизги айырмачылыктар төмөндөгүлөр:

  • Сактоо:

    • DATETIME жыл, ай, күн, саат, мүнөт, секундду сактайт.
    • TIMESTAMP Unix эпохасынын башынан бери секунддардын санын сактайт (1970-жылдын 1-январы 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 мындай функцияга ээ эмес (бирок триггерлер аркылуу жетишүүгө болот).

Салыштыруу таблицасы:

Өзгөчөлүк DATETIME TIMESTAMP
Сактоо форматы Жыл, ай, күн, саат, мүнөт, секунд Unix эпохасынын башынан бери секунддар
Убакыт тилкеси Тәуелсіз убакыт тилкесинен Кардардын убакыт тилкесинен көз каранды болот
Мәндердин диапазону Жалпысынан кеңири, 9999-жылга чейин Чектелүү, көбүнчө 2038-жылга чейин (32-бит)
Автоматтык жаңыртуу Жок (энгизилген) Бар (кызматтык, 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 -- автоматтык жаңыртуу
);