這應該是 MySQL 的 best practice 之一,不知道為什麼 Baron Schwartz 又拿出來講:「A simple rule for sane timestamps in MySQL」。
MySQL 內可以儲存「日期與時間」的資料型態是 DATETIME 與 TIMESTAMP 兩種,不過 DATETIME 沒有時區觀念,而 TIMESTAMP 只能是 UTC (GMT+0)。
相較於隔壁棚 PostgreSQL 的 Date/Time Types 就一種 TIMESTAMP,但支援 with timezone 與 without timezone 直接解決問題。
這使得 MySQL 上在儲存「日期與時間」以及處理的時候一直有種 WTF 的感覺...
就如同 Baron Schwartz 的建議,如果使用 MySQL,目前比較好的方法是用 INT UNSIGNED NOT NULL
儲存,把 timezone 的處理都放到應用程式端來處理,這樣產生的問題會比較少...
真的需要在 INSERT 或是 UPDATE 時更新欄位,可以用 trigger 處理,彈性反而比內建功能大不少。