prisma项目初始化
mkdir prisma-test
cd prisma-test
npm init -y
安装对应依赖
npm i -D typescript ts-node @types/node
typescript 初始化
npx tsc --init
安装prisma
npm i prisma
编写代码
初始化prisma
//指定初始化mysql数据库
prisma init --datasource-provider mysql
// schema.prisma 定义一个 schema 模型 user
model User {
id Int @id @default(autoincrement())
name String
createTime DateTime @default(now())
updateTime DateTime @updatedAt
}
生成 Prisma Client 代码
prisma migrate dev --name 0
prisma generate
在 src/index.ts 创建一条数据库数据
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
async function main() {
const user = await prisma.user.create({
data: {
name: 'yyqy',
})
}
main()
// 终端运行代码
npx ts-node ./src/index.ts
可以看到数据库中这一条记录的
createTime
和 updateTime
字段生成的时间都是 UTC 格式
开始我以为是mysql数据库时区的问题,一顿排查发现和 mysql 没有任何关系,而是prisma默认采用 UTC 时区
Improve Timezone Support for Existing MySQL Databases configured with a Non-UTC Timezone · Issue #5051 · prisma/prisma (github.com)
prisma 同步成mysql系统时区(Asia/Shanghai)
// 我们采用SQL写法把 createTim 和 updateTime 改成 mysql 时区时间戳
createTime DateTime @default(dbgenerated("NOW()")) @db.DateTime
updateTime DateTime @default(dbgenerated("NOW() ON UPDATE NOW()")) @db.Timestamp(0)