gpt4 book ai didi

php - Laravel 和 MySQL 时间戳值随 mysqld 配置而变化

转载 作者:行者123 更新时间:2023-12-03 22:29:41 36 4
gpt4 key购买 nike

我的本地服务器上有 MySQL 和 Laravel,默认配置和我的时区是 GMT+2。

测试 1

我没有触及 MySQL 配置中的任何内容,而是在我的数据库上尝试了一些东西:

SELECT CURRENT_TIMESTAMP, UTC_TIMESTAMP;

结果:
CURRENT_TIMESTAMP       UTC_TIMESTAMP
2020-06-09 16:34:58 2020-06-09 14:34:58

现在,我想在 Laravel 中请求这个原始数据:
id  device_id   lat        lng          alt     at      created_at               updated_at
1 10 10.000000 10.000000 NULL NULL 2020-06-09 16:21:55 2020-06-09 16:21:55

这是我使用 php artisan tinker 的测试:

TEST 1

它以 UTC (GMT+0) 显示 16:34。

测试 2

现在我尝试更改 mysql 的配置(在 /etc/mysql/mysql.conf.d/mysqld.cnf 中),我设置了这个配置:
default_time_zone='+00:00'

我重新启动我的服务器:
sudo service mysql restart

然后我再试一次与上面相同的测试:
CURRENT_TIMESTAMP       UTC_TIMESTAMP
2020-06-09 14:42:46 2020-06-09 14:42:46

现在,raw 显示了一些不同的东西(从 16 到 14 小时):
id  device_id   lat        lng          alt     at      created_at               updated_at
1 10 10.000000 10.000000 NULL NULL 2020-06-09 14:21:55 2020-06-09 14:21:55

在 Laravel 中:

enter image description here

它以 UTC (GMT+0) 显示 14:34。

问题

我期待 Laravel/Carbon(或者可能是 MySQL)理解日期仍然相同,但看起来没有。
还有,用 Test 1的配置, 当一列默认为 CURRENT_TIMESTAMP Laravel 将其理解为 UTC,这是错误的,因为 MySQL 会将其初始化为 GMT+2(在我的情况下)。

例如,当我执行 INSERT INTO 时查询具有时间戳列 DEFAULT 的表(Laravel 之外,来自 Adminer 或 PhpMyAdmin)至 CURRENT_TIMESTAMP , MySQL 将插入 "18:00"作为 GMT+2 而 Laravel 将读取 "18:00"作为 GMT+0。
我怎样才能避免这个问题?正在设置 mysqld 参数,如 Test 2是对的 ?

最佳答案

将日期的时区从数据库服务器转换到应用程序服务器是一个坏主意。他们应该使用 时区,因为由于 DST 的变化,时区转换不是 1:1 转换。您的本地/开发环境应尽可能接近您的生产环境。并且整个工具(DB 和 Laravel)最好都在 GMT+00:00(= Laravel 配置中的“UTC”),所以它是基于 UTC 标准的,你将能够轻松地重用/交换你的数据(或它的一部分)现在或以后任何其他时区的其他服务/用户,时区如 "GMT+2"仅当您想向您知道在此时区中的用户显示日期时才应该出现,而不是用于存储。

关于php - Laravel 和 MySQL 时间戳值随 mysqld 配置而变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62285505/

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