当使用Prisma连接腾讯云MySQL数据库时出现8小时时间差,通常是由于以下原因之一:
修改你的Prisma schema文件中的datasource配置,添加时区参数:
datasource db {
provider = "mysql"
url = "mysql://username:password@host:port/database?connection_limit=5&timezone=Asia/Shanghai"
}
如果可能,将MySQL服务器时区设置为东八区:
-- 临时设置(重启后失效)
SET GLOBAL time_zone = '+8:00';
SET time_zone = '+8:00';
-- 永久设置(修改my.cnf或my.ini)
[mysqld]
default-time-zone='+8:00'
如果你无法修改数据库配置,可以在应用层面处理时间转换:
// 从数据库读取后转换
const result = await prisma.yourModel.findMany();
const localDate = new Date(result.dateField).toLocaleString('zh-CN', { timeZone: 'Asia/Shanghai' });
// 写入数据库前转换
await prisma.yourModel.create({
data: {
dateField: new Date().toISOString() // 或使用其他格式
}
});
const prisma = new PrismaClient();
prisma.$use(async (params, next) => {
if (['create', 'update'].includes(params.action)) {
if (params.args.data?.dateField) {
params.args.data.dateField = new Date(params.args.data.dateField);
}
}
const result = await next(params);
if (result?.dateField) {
result.dateField = new Date(result.dateField);
}
return result;
});
如果问题仍未解决,请检查腾讯云MySQL实例的具体配置,确保没有其他网络或代理层面对时间进行了转换。