MySQL与本地主机时间不一致问题求助(WampServer环境)
我之前在Wamp环境下开发项目时也碰到过一模一样的时区问题,改了php.ini还是没效果,后来排查发现是多个环节的配置没同步,给你梳理几个关键排查点:
确认PHP配置是否真正生效
Wamp里可能存在多个php.ini文件,比如CLI模式和Apache模式用的是不同的配置。别直接去文件夹里找,最快的方式是在Wamp管理器右键点击「PHP」→「php.ini」,打开的才是Apache实际加载的配置文件。修改date.timezone = Asia/Shanghai(根据你的时区调整)后,一定要重启Apache服务。
验证是否生效:在项目根目录新建phpinfo.php,内容如下:<?php phpinfo(); ?>访问
localhost/phpinfo.php,搜索date.timezone,看显示的是不是你设置的时区。如果还是UTC或者其他值,说明你改错了配置文件。检查MySQL数据库的时区设置
很多时候问题根源在数据库,而不是PHP。默认情况下MySQL可能用UTC时区,导致PHP传过去的本地时间被转成UTC存储,取出来就和本地时间不一样了。- 打开phpMyAdmin,执行SQL命令:
如果结果显示SELECT @@global.time_zone, @@session.time_zone;UTC,就需要修改MySQL配置。 - 在Wamp的MySQL配置文件(路径一般是
bin/mysql/mysql[版本号]/my.ini)中,找到[mysqld]节点,添加或修改:default-time-zone = '+08:00' - 重启MySQL服务,再执行上面的SQL命令确认时区是否改成了东八区(或你的本地时区)。
另外,也可以在数据库连接代码里强制指定时区,比如用PDO的话,连接字符串加上;timezone=Asia/Shanghai;用mysqli的话,连接成功后执行SET time_zone = '+08:00';。
- 打开phpMyAdmin,执行SQL命令:
排查代码中的时区覆盖
检查项目代码里有没有用date_default_timezone_set()函数手动设置时区,这个会覆盖php.ini的配置。如果有的话,要么删掉,要么改成和php.ini一致的时区。
另外,确认打卡逻辑里的时间生成方式,比如是不是用date('Y-m-d H:i:s')(PHP时区正确的话,这个是本地时间),而不是直接用UTC时间的函数。重启所有Wamp服务
改完任何配置后,一定要重启Apache和MySQL两个服务,Wamp管理器里点击「Restart All Services」,确保新配置生效。
内容的提问来源于stack exchange,提问作者Troy Marker

