datetime vs timestamp
createdAt, updatedAt νλ type μ datetime μΌλ‘ ν΄μΌ ν μ§, timestamp λ‘ ν΄μΌν μ§ κ³ λ―Όμ΄μλλ°, νμ¬ μ§νμ€μΈ νλ‘μ νΈμμ timestamp λ₯Ό μ νν μ΄μ λ₯Ό μ 리ν΄λ³΄μλ€.
Timestamp μ μ₯μ
1. κΈλ‘λ² μλΉμ€μΈ κ²½μ° λ°μ΄ν° μ λ ₯ μκ° κ΄λ¦¬κ° νΈνλ€.
timestamp λ datetime κ³Ό λ¬λ¦¬ time_zone μ μμ‘΄νκ³ UTC μ§μμ΄ κ°λ₯νλ€.
π‘ νμμ‘΄μ΄λ ?
λμΌν λ‘컬 μκ°μ λ°λ₯΄λ μ§μμ μλ―Ένλ©° ν΄λΉ κ΅κ°μ μν΄ λ²μ μΌλ‘ μ§μ λλ€. κΈ°μ€μ μκ΅μ 그리λμΉ μ²λ¬Έλλ₯Ό κΈ°μ€μΌλ‘ offset μ λμ΄ κ΅κ°λ³λ‘ νκ° νΉμ μ¬λ¬κ°μ νμμ‘΄μ κ°μ§λ€.
PostgresQL μμ timezone νμΈνλ λ²
μ§κΈ λ§λ€κ³ μλ μλΉμ€λ κΈλ‘λ² μλΉμ€μ΄κΈ° λλ¬Έμ νμμ‘΄μ΄ μ§μλλ timestamp λ₯Ό μ¨μΌ λ°μ΄ν°λ₯Ό μ½κ² κ΄λ¦¬ν μ μλ€κ³ νλ¨νλ€.
TIMESTAMP μ κ²½μ°
- insert into TBL (ts) values (now()) β UTC λ‘ λ³νλμ΄ κΈ°λ‘λ¨
- select ts from TBL β νμμ‘΄μ λ°λΌ λ³νλμ΄ μΆλ ₯λ¨
DATETIME μΈ κ²½μ°
- insert into TBL (ts) values (now()) β LOCAL TIME μΌλ‘ κΈ°λ‘λ¨
- select ts from TBL β νμμ‘΄μ κ΄κ³μμ΄ μ²μμ κΈ°λ‘λμλ μκ°μ΄ μΆλ ₯λ¨
2. μΈλ±μ±μ΄ λ λΉ λ₯΄κ² λλ€.
datetime μ 1000-01-01 00:00:00 λΆν°Β 9999-12-31 23:59:59 κΉμ§ μ§μ
timestamp λ 1970-01-01 00:00:01 λΆν°Β 2038-01-19 03:14:07 κΉμ§ μ§μ
μ§μνλ λ²μκ° λ μ κΈ° λλ¬Έμ timestamp κ° indexκ° λ λΉ λ₯΄κ² μμ±λλ€.
3. byte κ° λ μλ€.
TIMESTAMP λ 4 bytes vs DATETIME μ 8 byte μ΄λ€. column type μ΄ λ€λ₯΄κΈ° λλ¬Έμ΄λ€. datetime - λ¬Έμν, timestamp - μ«μνμΌλ‘ λ³νλμ΄ μ μ₯λλ€.
4. μλμ λ ₯μ΄ λλ€.
datetime - μμ ν μΌμ΄ μμΌλ©΄ κ·Έ λλ§λ€ λ μ§λ₯Ό μ λ ₯
timestamp - λ μ§λ₯Ό λ°λ‘ μ λ ₯ μν΄μ€λ μλμΌλ‘ μ λ ₯ κ°λ₯ (CURRENT_TMESTAMP μ¬μ©μ)
Timestamp λ¨μ (2038 λ λ¬Έμ )
2038λ λ¬Έμ
(2038εΉ΄ ει‘,Β μμ΄:Β year 2038 problem, Unix Millennium bug, Y2K38)λ μ»΄ν¨ν° λΆμΌμμΒ 2038λ λλ μ νμ νΉμ ν μ»΄ν¨ν° μννΈμ¨μ΄μ μ΄μμ΄ λ°μνλ λ¬Έμ λ₯Ό λ§νλ€. μ΄ λ¬Έμ λΒ POSIX μκ° νκΈ°λ²μ μ΄μ©νλ νλ‘κ·Έλ¨μμ λ°μνλλ°, μ΄ νκΈ°λ²μ μκ°μΒ 1970λ Β 1μ 1μΌ μμ Β UTC μ΄ν κ²½κ³Όλ μ΄ μκ°μ μ΄μ©νμ¬ νννλ€. μ΄ νκΈ°λ²μΒ μ λμ€ κ³μ΄ μ μ΄μ 체μ μμ νμ€μ΄λ©°,Β Cκ° λ리 μ΄μ©λκΈ° λλ¬Έμ λ€λ₯Έ λλΆλΆμ μ΄μ 체μ μμ μλνλ νλ‘κ·Έλ¨μλ μν₯μ μ€λ€. λλΆλΆμ 32λΉνΈ μμ€ν μμ μ΄ μκ°μ μ μ₯νλ λ° μ΄μ©λλΒ time_tμλ£ νμμ λΆνΈ μλΒ 32λΉνΈΒ μ μνμ΄λ€. POSIX νμ€μ λ°λ₯΄λ©΄, μ΄ νμμ μ΄μ©νμ¬ λνλΌ μ μλ μ΅νμ μκ°μ 1970λ 1μ 1μΌ μμ μμΒ 2147483647 μ΄κ° μ§λΒ 2038λ Β 1μ 19μΌΒ νμμΌΒ 03:14:07Β UTCμ΄λ€. μ΄ μκ° μ΄νμ μκ°μ λ²μλ₯Ό μ΄κ³Όνμ¬ λ΄λΆμ μΌλ‘ μμλ‘ ννλλ©°, νλ‘κ·Έλ¨μ μ΄μ μλμ μ λ°νλλ°, μλνλ©΄ μ΄λ¬ν κ°μ 2038λ λμ νλ‘κ·Έλ¨μ ꡬν λ°©λ²μ λ°λΌ 1970λ λλ 1901λ μ κ°λ¦¬ν€κΈ° λλ¬Έμ΄λ€. λ°λΌμ κ³μ° μ€λ₯μ κ²°μ μ€λ₯κ° λ°μν μ μλ€. μΆμ²: wiki
2038λ timestamp μλ¬
32λΉνΈλ‘ ννν μ μλ λ μ§μ νκ³κ° 2038λ 1μ 19μΌμ΄κΈ° λλ¬Έμ timestamp λ‘ νννλ νλκ° 2038λ 1μ 19μΌ μ΄νμλ μ°μ¬μ§ κ²μ΄ νμ€νλ€λ©΄ datetime μ μ°λκ²μ΄ μ’λ€κ³ μκ°λλ€.
λ¬Όλ‘ κ·Έλ° κ²½μ°κ° μ¬ κ²½μ° κΈ°μ‘΄ timestamp λ₯Ό datetime μΌλ‘ λ³νν μ μμ§λ§ λ°μ΄ν° μμ΄ λ§μμλ‘ λ³νμ΄ μ½μ§ μμ κ²μ΄λ€.
π©π»βπ» μ§κΈ λ§λ€κ³ μλ μλΉμ€λ κΈλ‘λ² μλΉμ€μ΄κ³ , 2038λ κΉμ§μ κ³νμ΄ μλ μνλ μλκΈ° λλ¬Έμ μ₯μ μ΄ λ ν¬λ€κ³ μκ°ν΄ timestamp λ₯Ό μ¬μ©νκΈ°λ‘ νλ€.