我的本地服务器上有MySQL和Laravel,默认配置,我的时区是GMT+2。
我没有接触到MySQL配置中的任何东西,我在数据库上尝试了一些东西:
SELECT CURRENT_TIMESTAMP, UTC_TIMESTAMP;
结果:
CURRENT_TIMESTAMP UTC_TIMESTAMP
2020-06-09 16:34:58 2020-06-09 14:34:58
现在,我想要这个raw in 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
进行的测试:
它显示世界协调时16:34(格林尼治标准时间+0)。
现在我尝试更改mysql的配置(在/etc/mysql/mysql.conf.d/mysql.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:
它显示的是世界协调时14:34(格林尼治标准时间+0)。
我希望Laravel/Carbon(或者可能是MySQL)理解日期仍然是相同的,但它看起来不是。
另外,在配置test1
时,当列默认为current_timestamp
时,Laravel将其理解为UTC,这是错误的,因为MySQL将其初始化为GMT+2(在我的例子中)。
例如,当我对一个表执行insert into
查询(在Laravel之外,从Adminer或PhpMyAdmin),该表的时间戳列default
到current_timestamp
时,MySQL将插入“18:00”作为GMT+2,而Laravel将读取“18:00”作为GMT+0.
如何避免这个问题? 像test2
中那样设置mysqld参数是否正确?
您需要在PHP配置中更改时区。
在php.ini文件中,更改此值-date.timezone
也可以在Laravel配置中设置时区。
在-app/config/app.php中-'timezone'=>; 'UTC'
更改此值。