Date Time

MySQL은 λ‚ μ§œλ§Œ / μ‹œκ°„λ§Œ ν˜Ήμ€ λ‚ μ§œ + μ‹œκ°„ ν•©μ³μ„œ ν•˜λ‚˜μ˜ μ»¬λŸΌμ— μ €μž₯ν•  수 μžˆλ„λ‘ μ—¬λŸ¬ κ°€μ§€ νƒ€μž…μ„ μ§€μ›ν•œλ‹€.

데이터 νƒ€μž…
μ €μž₯ 곡간(Byte)

YEAR

1

DATE

3

TIME

3 + (λ°€λ¦¬μ΄ˆ λ‹¨μœ„ μ €μž₯ 곡간)

DATETIME

5 + (λ°€λ¦¬μ΄ˆ λ‹¨μœ„ μ €μž₯ 곡간)

TIMESTAMP

4 + (λ°€λ¦¬μ΄ˆ λ‹¨μœ„ μ €μž₯ 곡간)

λ°€λ¦¬μ΄ˆ λ‹¨μœ„

λ°€λ¦¬μ΄ˆ λ‹¨μœ„λ‘œ 데이터λ₯Ό μ €μž₯ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ‚ μ§œ νƒ€μž… λ’€ κ΄„ν˜Έ μ•ˆμ— 숫자λ₯Ό λ„£μ–΄μ„œ λ°€λ¦¬μ΄ˆ λ‹¨μœ„ μ €μž₯ 곡간을 μ§€μ •ν•  수 μžˆλ‹€.(기본값은 0) λ°€λ¦¬μ΄ˆ λ‹¨μœ„ μ €μž₯ 곡간은 2μžλ¦¬λ‹Ή 1λ°”μ΄νŠΈμ”© 곡간이 더 ν•„μš”ν•˜μ—¬, MySQL 8.0μ—μ„œλŠ” λ§ˆμ΄ν¬λ‘œμ΄ˆκΉŒμ§€ μ €μž₯ κ°€λŠ₯ν•œ DATETIME(6) νƒ€μž…μ€ (5+3)λ₯Ό μ‚¬μš©ν•œλ‹€.

νƒ€μž„μ‘΄

MySQL의 λ‚ μ§œ νƒ€μž…μ€ 컬럼 μžμ²΄μ— νƒ€μž„μ‘΄ 정보가 μ €μž₯λ˜μ§€ μ•Šμ•„ DATETIME / DATE νƒ€μž…μ€ ν˜„μž¬ DBMS 컀λ„₯μ…˜μ˜ νƒ€μž„μ‘΄κ³Ό 관계없이 μž…λ ₯된 값을 κ·ΈλŒ€λ‘œ μ €μž₯ν•œλ‹€. ν•˜μ§€λ§Œ TIMESTAMPλŠ” 항상 UTC νƒ€μž„μ‘΄μœΌλ‘œ μ €μž₯λ˜λ―€λ‘œ νƒ€μž„μ‘΄μ΄ 달라져도 값이 μžλ™μœΌλ‘œ λ³΄μ •λœλ‹€.

CREATE TABLE tb_timezone
(
    fd_datetime  DATETIME,
    fd_timestamp TIMESTAMP
);

SET time_zone = 'Asia/Seoul';

INSERT INTO tb_timezone
VALUES (NOW(), NOW());

SELECT *
FROM tb_timezone;
-- +---------------------+---------------------+
-- | fd_datetime         | fd_timestamp        |
-- +---------------------+---------------------+
-- | 2023-05-05 05:09:00 | 2023-05-05 05:09:00 |
-- +---------------------+---------------------+

SET time_zone = 'America/Los_Angeles';

SELECT *
FROM tb_timezone;
-- +---------------------+---------------------+
-- | fd_datetime         | fd_timestamp        |
-- +---------------------+---------------------+
-- | 2023-05-05 05:09:00 | 2023-05-04 13:09:00 |
-- +---------------------+---------------------+

μžλ™ μ—…λ°μ΄νŠΈ μ„€μ •

MySQL은 λ‚ μ§œ νƒ€μž…μ— λŒ€ν•΄ INSERT / UPDATE μ‹œ μžλ™μœΌλ‘œ 값을 μ—…λ°μ΄νŠΈν•  수 μžˆλ„λ‘ μ„€μ •ν•  수 μžˆλ‹€.

CREATE TABLE tb_autoupdate
(
    id                   BIGINT NOT NULL AUTO_INCREMENT,
    created_at_datetime  DATETIME  DEFAULT CURRENT_TIMESTAMP,
    created_at_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at_datetime  DATETIME  DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    updated_at_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (id)
);

MySQL 5.6 이전 λ²„μ „μ—μ„œλŠ” TIMESTAMP νƒ€μž…μ— λŒ€ν•΄μ„œλ§Œ μžλ™ μ—…λ°μ΄νŠΈ 섀정이 κ°€λŠ₯ν–ˆμ§€λ§Œ, 5.6 이후 λ²„μ „λΆ€ν„°λŠ” DATETIME νƒ€μž…μ— λŒ€ν•΄μ„œλ„ μžλ™ μ—…λ°μ΄νŠΈ 섀정이 κ°€λŠ₯ν•˜λ‹€.

참고자료

Last updated

Was this helpful?