gpt4 book ai didi

mysql - 将 MySQL 数据库时区设置为 GMT

转载 作者:IT老高 更新时间:2023-10-29 00:08:57 28 4
gpt4 key购买 nike

我需要更改单个数据库的时区,这可能吗?

我知道我们可以在 WHM 中更改时区(我们正在使用来自 hostgator 的专用服务器),但是在服务器上运行的大量遗留软件中有很多 +6 小时的编码(即服务器时区是CST,我们想要 GMT 时间,所以以前的开发人员在代码中手动更改日期/时间 - 糟糕!)。

我现在正在开发一个新软件,并希望在 GMT 中使用它,我知道我可以使用 date_default_timezone_set('GMT') 但这不会解决日期时间列设置为 CURRENT_TIMESTAMP 的 MySQL 插入,因为它会插入@CST 时区。

最佳答案

不可以,无法更改 MySQL 实例中单个数据库的时区。

我们可以通过查询检索服务器和客户端的 time_zone 设置,如下所示:

SELECT @@global.time_zone, @@session.time_zone;

我们还可以更改 session 的客户端时区,或更改整个 MySQL 实例的时区。

但我们需要敏锐地意识到这一变化对现有客户端连接的影响,以及实例中已存储的 DATETIMETIMESTAMP 值将如何被解释。

要在 MySQL 实例启动时设置服务器时区,我们可以修改 /etc/my.cnf 文件(或读取 mysql 实例初始化参数的任何地方),在 下[mysqld] 部分:

[mysqld]
default-time-zone='+00:00'

-- 或--

也可以(不太理想)将 --default_time_zone='+00:00' 选项添加到 mysqld_safe

注意:更改 MySQL 服务器上的时区设置不会更改存储在现有 DATETIME 或 TIMESTAMP 列中的值,但是因为它确实有效地更改了解释这些存储值的上下文,所以它看起来所有的值都被改变了。 (08:00 被认为是 CST 上午 8 点,服务器的时区从 CST 更改为 GMT,同样的“08:00”现在将被视为 GMT 上午 8 点,实际上是 CST 凌晨 2 点。

另请记住,TIMESTAMP 列始终以 UTC 格式存储,而 DATETIME 列没有时区。 http://dev.mysql.com/doc/refman/5.5/en/datetime.html

每个客户端 session 都可以更改自己 session 的时区设置:

SET time_zone='-06:00';

但这并没有真正“解决”时区转换问题,它只是转移了转换问题。

应用层处理时区转换本身并没有什么“坏”之处;有时,这是最好的处理方式。它只需要正确和一致地完成。

(您所描述的设置的奇怪之处在于,应用程序正在存储 DATETIME 值,就好像 MySQL 服务器时区设置为 GMT,但 MySQL 服务器时区设置为其他设置。)

关于mysql - 将 MySQL 数据库时区设置为 GMT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13916747/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com