从数据库获取DateTime字段返回错误时间的技术求助
解决Timestamp查询时区偏移问题
方法1:查询时转换时区获取原始值
如果你的数据库是MySQL,TIMESTAMP类型会自动根据会话时区转换时间。要获取数据库里原样存储的时间,可以在查询时手动转换时区:
SELECT DISTINCT u2.user_username as user, u1.id_of_pois as id_of_pois, -- 把会话时区转换回数据库存储的时区(假设数据库存的是GMT+3) CONVERT_TZ(u2.Timestamp, @@session.time_zone, '+03:00') AS original_timestamp FROM pois_visit u1, pois_visit u2 WHERE u1.user_username = ? AND u2.user_username = ? AND u1.id_of_pois = u2.id_of_pois AND TIMESTAMPDIFF(HOUR, u1.Timestamp,u2.Timestamp) BETWEEN -2 AND 2
如果数据库存储的是UTC时间,就把目标时区改成'+00:00'。
方法2:修改数据库连接时区
在建立数据库连接时,直接指定和数据库存储一致的时区(GMT+3),这样读取时不会自动偏移。以Node.js的mysql驱动为例:
const connection = mysql.createConnection({ host: '你的数据库地址', user: '用户名', password: '密码', database: '数据库名', timezone: '+03:00' // 匹配数据库存储时区 });
方法3:更换字段类型(若允许改表结构)
如果不需要时区自动同步功能,把Timestamp字段类型改成DATETIME——这个类型会原样存储和返回时间,完全不受时区设置影响。
内容的提问来源于stack exchange,提问作者Strike
相关产品推荐
相关产品推荐

