prisma與數(shù)據(jù)庫(kù)時(shí)間差8小時(shí)
在next.JS項(xiàng)目中使用prisma操作騰訊云mysql數(shù)據(jù)庫(kù)時(shí),發(fā)現(xiàn)通過(guò)查詢得到的當(dāng)前時(shí)間與數(shù)據(jù)庫(kù)創(chuàng)建時(shí)間相差8小時(shí)。造成這種情況的原因可能是:
數(shù)據(jù)庫(kù)時(shí)區(qū)設(shè)置不當(dāng)。 prisma在創(chuàng)建數(shù)據(jù)時(shí),會(huì)自動(dòng)添加一個(gè)createdat時(shí)間戳。該時(shí)間戳是保存在數(shù)據(jù)庫(kù)中的,因此數(shù)據(jù)庫(kù)的時(shí)區(qū)設(shè)置會(huì)影響時(shí)間戳的準(zhǔn)確性。
解決方法是確保數(shù)據(jù)庫(kù)的時(shí)區(qū)設(shè)置正確。對(duì)于騰訊云mysql 5.7版本,可以在命令行中使用以下命令設(shè)置時(shí)區(qū):
set global time_zone = '+08:00';
如果 數(shù)據(jù)庫(kù)時(shí)區(qū)設(shè)定正確,但 時(shí)間依然有問(wèn)題,問(wèn)題就出在prisma本身。
prisma會(huì)根據(jù)環(huán)境變量tz來(lái)確定服務(wù)器的時(shí)區(qū)。在next.js項(xiàng)目中,該變量可能未正確設(shè)置。可以在.env文件中設(shè)置tz變量,如下所示:
TZ=Asia/Shanghai
設(shè)置tz變量后,prisma將能夠正確設(shè)置服務(wù)器時(shí)區(qū),從而解決時(shí)間差問(wèn)題。