為什么 Prisma 操作 mysql 數據庫時,數據的時間少了 8 小時?
在 Next.JS 項目中使用 Prisma 連接騰訊云 MySQL 5.7 數據庫時,通過 select TIMEDIFF(NOW(), UTC_TIMESTAMP) 查詢得到的結果為 08:00:00,表明數據庫時區應該沒問題。然而,通過 Prisma 創建的數據時間卻少了 8 小時。
原因分析
數據庫本身不存儲時區信息,因此需要約定數據庫保存的時間是 UTC 還是某個地方的本地時間。通常建議使用 UTC 時間,方便轉換。
在存取數據時需要進行時區轉換。將本地時間轉換為 UTC 時間后再存儲。取數據時逆向轉換。服務端通常使用 UTC 時間。
解決方式
- 在服務端轉換時間:將瀏覽器端傳遞的時間轉換為 UTC 時間。
- 使用服務端當前時間:非用戶指定時,可以使用服務端當前時間替代。
參考鏈接