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

问题描述 投票:0回答:1

我的本地服务器上有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

现在,原始显示的内容有所不同(从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 INTODEFAULT的表(Laravel外部,来自Adminer或PhpMyAdmin)上执行CURRENT_TIMESTAMP查询时,MySQL将插入“ 18:00”作为GMT + 2,而Laravel将读取“ 18:00”作为GMT + 0。如何避免这个问题?是否像Test 2中那样设置mysqld参数正确?

php mysql laravel php-carbon
1个回答
0
投票

您需要在PHP配置中更改时区。

在您的php.ini文件中,更改此值-date.timezone

或者您可以在Laravel配置中设置时区。

在您的app / config / app.php中-'timezone' => 'UTC'更改此值。

© www.soinside.com 2019 - 2024. All rights reserved.