我有一个PHP脚本正在为MySQL会话设置时区。我已经检查了输出,并正确发送了偏移量+1:00(DST中的欧洲/伦敦)。但是,当我读取放置在数据库中的时间戳时,它晚了八个小时。为什么会这样呢?

MySQL服务器将时间戳设置为默认值。

最佳答案

更新数据库参数:

SET GLOBAL time_zone = 'Europe/London';
// OR: SET time_zone = 'Europe/London';
// OR: SET @@session.time_zone = 'Europe/London';


直接在请求中更新时区:

SELECT ..., CONVERT_TZ(field, 'GMT', 'Europe/London') FROM ...


在条目文件(如index.php)中定义正确的时区:

date_default_timezone_set('Europe/London');


另外,它可以在服务器(示例,Ubuntu)上完成:

sudo timedatectl set-timezone Europe/London
# do not forget to restart all services: nginx|Apache, mysql, ...

10-07 23:01