更新 mysql 时区并更改所有 TIMESTAMPS 列
Posted
技术标签:
【中文标题】更新 mysql 时区并更改所有 TIMESTAMPS 列【英文标题】:Update mysql timezone and change all TIMESTAMPS columns 【发布时间】:2015-12-04 10:29:03 【问题描述】:首先我将 mysql 设置为 America/Montreal
SET time_zone = 'America/Montreal
为了确保一切正常,我在 php 中使用:
date_default_timezone_set('America/Montreal');
我不明白的是,保存在数据库中的值不正确,例如 11:00:00 将保存 10:00:00,但是在获取信息时我会显示 11:00:00。因此,最终系统按我们的意愿运行,但数据库中的数据不准确。有人可以解释我为什么吗? 例如,我将列 start_time 设置为 TIMESTAMP
"INSERT into table set start_time = '".date("Y-m-d H:i:s")."'
假设当前时间为 11:00:00,但保存的时间为 10:00:00,获取时将返回 11:00:00。
然后回到我的问题,由于数据不准确,我想将服务器时间更改为正确的时间并让 MySQL 使用新时间,如果这样做,数据库中的日期/时间数据会自动更新?如果不是,我该如何更新新时区的所有日期和时间?
谢谢。
【问题讨论】:
您所指的列的数据类型是什么?您问题的标题是“日期列”,但显然 MySQL 的DATE
数据类型不存储时间;并且DATETIME
和TIME
数据类型不支持时区...只有TIMESTAMP
数据类型对时区敏感——这些值在内部存储为UTC,但在插入时从/到数据库连接的time_zone
转换/恢复。听起来好像您需要相应地设置该变量。
“将节省 10:00:00”是什么意思?您对这一点的确定程度如何准确?
【参考方案1】:
那是因为您的 MySQL 服务器有另一个时区(您的 PHP 服务器与您的 MySQL 服务器不同)!当您获取时间戳字段时,php 会根据您的默认时区自动对其进行本地化。要在您的数据库上也有正确的时间戳,您需要在连接到 MySQL 时设置它:
$mysqli->query("set time_zone = '+00:00'");
此命令将您的 MySQL 连接时区设置为 GMT,但对于蒙特利尔,它应该是 -05:00
。
希望这会有所帮助!
【讨论】:
以上是关于更新 mysql 时区并更改所有 TIMESTAMPS 列的主要内容,如果未能解决你的问题,请参考以下文章