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